var Sf=Object.defineProperty;var wf=(e,t,n)=>t in e?Sf(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Ii=(e,t,n)=>wf(e,typeof t!="symbol"?t+"":t,n);function kf(e,t){for(var n=0;na[i]})}}}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 i of document.querySelectorAll('link[rel="modulepreload"]'))a(i);new MutationObserver(i=>{for(const r of i)if(r.type==="childList")for(const o of r.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&a(o)}).observe(document,{childList:!0,subtree:!0});function n(i){const r={};return i.integrity&&(r.integrity=i.integrity),i.referrerPolicy&&(r.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?r.credentials="include":i.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function a(i){if(i.ep)return;i.ep=!0;const r=n(i);fetch(i.href,r)}})();function Cf(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var yc={exports:{}},no={},vc={exports:{}},K={};/** * @license React * react.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */var _i=Symbol.for("react.element"),Pf=Symbol.for("react.portal"),_f=Symbol.for("react.fragment"),jf=Symbol.for("react.strict_mode"),Tf=Symbol.for("react.profiler"),Ef=Symbol.for("react.provider"),Nf=Symbol.for("react.context"),Af=Symbol.for("react.forward_ref"),If=Symbol.for("react.suspense"),Lf=Symbol.for("react.memo"),qf=Symbol.for("react.lazy"),Rd=Symbol.iterator;function Rf(e){return e===null||typeof e!="object"?null:(e=Rd&&e[Rd]||e["@@iterator"],typeof e=="function"?e:null)}var bc={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},xc=Object.assign,Sc={};function ka(e,t,n){this.props=e,this.context=t,this.refs=Sc,this.updater=n||bc}ka.prototype.isReactComponent={};ka.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")};ka.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function wc(){}wc.prototype=ka.prototype;function xl(e,t,n){this.props=e,this.context=t,this.refs=Sc,this.updater=n||bc}var Sl=xl.prototype=new wc;Sl.constructor=xl;xc(Sl,ka.prototype);Sl.isPureReactComponent=!0;var Dd=Array.isArray,kc=Object.prototype.hasOwnProperty,wl={current:null},Cc={key:!0,ref:!0,__self:!0,__source:!0};function Pc(e,t,n){var a,i={},r=null,o=null;if(t!=null)for(a in t.ref!==void 0&&(o=t.ref),t.key!==void 0&&(r=""+t.key),t)kc.call(t,a)&&!Cc.hasOwnProperty(a)&&(i[a]=t[a]);var s=arguments.length-2;if(s===1)i.children=n;else if(1>>1,fe=R[le];if(0>>1;lei(Eo,Z))yni(Ai,Eo)?(R[le]=Ai,R[yn]=Z,le=yn):(R[le]=Eo,R[hn]=Z,le=hn);else if(yni(Ai,Z))R[le]=Ai,R[yn]=Z,le=yn;else break e}}return H}function i(R,H){var Z=R.sortIndex-H.sortIndex;return Z!==0?Z:R.id-H.id}if(typeof performance=="object"&&typeof performance.now=="function"){var r=performance;e.unstable_now=function(){return r.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var l=[],u=[],p=1,f=null,h=3,x=!1,k=!1,v=!1,P=typeof setTimeout=="function"?setTimeout:null,g=typeof clearTimeout=="function"?clearTimeout:null,m=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function y(R){for(var H=n(u);H!==null;){if(H.callback===null)a(u);else if(H.startTime<=R)a(u),H.sortIndex=H.expirationTime,t(l,H);else break;H=n(u)}}function b(R){if(v=!1,y(R),!k)if(n(l)!==null)k=!0,Ve(j);else{var H=n(u);H!==null&&ot(b,H.startTime-R)}}function j(R,H){k=!1,v&&(v=!1,g(z),z=-1),x=!0;var Z=h;try{for(y(H),f=n(l);f!==null&&(!(f.expirationTime>H)||R&&!be());){var le=f.callback;if(typeof le=="function"){f.callback=null,h=f.priorityLevel;var fe=le(f.expirationTime<=H);H=e.unstable_now(),typeof fe=="function"?f.callback=fe:f===n(l)&&a(l),y(H)}else a(l);f=n(l)}if(f!==null)var Bn=!0;else{var hn=n(u);hn!==null&&ot(b,hn.startTime-H),Bn=!1}return Bn}finally{f=null,h=Z,x=!1}}var I=!1,q=null,z=-1,ne=5,G=-1;function be(){return!(e.unstable_now()-GR||125le?(R.sortIndex=Z,t(u,R),n(l)===null&&R===n(u)&&(v?(g(z),z=-1):v=!0,ot(b,Z-le))):(R.sortIndex=fe,t(l,R),k||x||(k=!0,Ve(j))),R},e.unstable_shouldYield=be,e.unstable_wrapCallback=function(R){var H=h;return function(){var Z=h;h=H;try{return R.apply(this,arguments)}finally{h=Z}}}})(Nc);Ec.exports=Nc;var Gf=Ec.exports;/** * @license React * react-dom.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */var Zf=S,Ze=Gf;function _(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),us=Object.prototype.hasOwnProperty,Yf=/^[: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]*$/,zd={},Ud={};function Kf(e){return us.call(Ud,e)?!0:us.call(zd,e)?!1:Yf.test(e)?Ud[e]=!0:(zd[e]=!0,!1)}function Xf(e,t,n,a){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return a?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function Jf(e,t,n,a){if(t===null||typeof t>"u"||Xf(e,t,n,a))return!0;if(a)return!1;if(n!==null)switch(n.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 ze(e,t,n,a,i,r,o){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=a,this.attributeNamespace=i,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=r,this.removeEmptyString=o}var Te={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Te[e]=new ze(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Te[t]=new ze(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Te[e]=new ze(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Te[e]=new ze(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){Te[e]=new ze(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Te[e]=new ze(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Te[e]=new ze(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Te[e]=new ze(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Te[e]=new ze(e,5,!1,e.toLowerCase(),null,!1,!1)});var Cl=/[\-:]([a-z])/g;function Pl(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(Cl,Pl);Te[t]=new ze(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(Cl,Pl);Te[t]=new ze(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(Cl,Pl);Te[t]=new ze(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Te[e]=new ze(e,1,!1,e.toLowerCase(),null,!1,!1)});Te.xlinkHref=new ze("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Te[e]=new ze(e,1,!1,e.toLowerCase(),null,!0,!0)});function _l(e,t,n,a){var i=Te.hasOwnProperty(t)?Te[t]:null;(i!==null?i.type!==0:a||!(2s||i[o]!==r[s]){var l=` `+i[o].replace(" at new "," at ");return e.displayName&&l.includes("")&&(l=l.replace("",e.displayName)),l}while(1<=o&&0<=s);break}}}finally{Io=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Ha(e):""}function eg(e){switch(e.tag){case 5:return Ha(e.type);case 16:return Ha("Lazy");case 13:return Ha("Suspense");case 19:return Ha("SuspenseList");case 0:case 2:case 15:return e=Lo(e.type,!1),e;case 11:return e=Lo(e.type.render,!1),e;case 1:return e=Lo(e.type,!0),e;default:return""}}function fs(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 Qn:return"Fragment";case Wn:return"Portal";case cs:return"Profiler";case jl:return"StrictMode";case ms:return"Suspense";case ps:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Lc:return(e.displayName||"Context")+".Consumer";case Ic:return(e._context.displayName||"Context")+".Provider";case Tl:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case El:return t=e.displayName||null,t!==null?t:fs(e.type)||"Memo";case Ht:t=e._payload,e=e._init;try{return fs(e(t))}catch{}}return null}function tg(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 fs(t);case 8:return t===jl?"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 ln(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Rc(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function ng(e){var t=Rc(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),a=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var i=n.get,r=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return i.call(this)},set:function(o){a=""+o,r.call(this,o)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return a},setValue:function(o){a=""+o},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Ri(e){e._valueTracker||(e._valueTracker=ng(e))}function Dc(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),a="";return e&&(a=Rc(e)?e.checked?"true":"false":e.value),e=a,e!==n?(t.setValue(e),!0):!1}function fr(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 gs(e,t){var n=t.checked;return me({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Fd(e,t){var n=t.defaultValue==null?"":t.defaultValue,a=t.checked!=null?t.checked:t.defaultChecked;n=ln(t.value!=null?t.value:n),e._wrapperState={initialChecked:a,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Mc(e,t){t=t.checked,t!=null&&_l(e,"checked",t,!1)}function hs(e,t){Mc(e,t);var n=ln(t.value),a=t.type;if(n!=null)a==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(a==="submit"||a==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?ys(e,t.type,n):t.hasOwnProperty("defaultValue")&&ys(e,t.type,ln(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Bd(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var a=t.type;if(!(a!=="submit"&&a!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function ys(e,t,n){(t!=="number"||fr(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Va=Array.isArray;function ra(e,t,n,a){if(e=e.options,t){t={};for(var i=0;i"+t.valueOf().toString()+"",t=Di.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function oi(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Za={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},ag=["Webkit","ms","Moz","O"];Object.keys(Za).forEach(function(e){ag.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Za[t]=Za[e]})});function Fc(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Za.hasOwnProperty(e)&&Za[e]?(""+t).trim():t+"px"}function Bc(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var a=n.indexOf("--")===0,i=Fc(n,t[n],a);n==="float"&&(n="cssFloat"),a?e.setProperty(n,i):e[n]=i}}var ig=me({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 xs(e,t){if(t){if(ig[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(_(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(_(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(_(61))}if(t.style!=null&&typeof t.style!="object")throw Error(_(62))}}function Ss(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 ws=null;function Nl(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var ks=null,oa=null,sa=null;function Vd(e){if(e=Ei(e)){if(typeof ks!="function")throw Error(_(280));var t=e.stateNode;t&&(t=so(t),ks(e.stateNode,e.type,t))}}function $c(e){oa?sa?sa.push(e):sa=[e]:oa=e}function Hc(){if(oa){var e=oa,t=sa;if(sa=oa=null,Vd(e),t)for(e=0;e>>=0,e===0?32:31-(gg(e)/hg|0)|0}var Mi=64,zi=4194304;function Wa(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 vr(e,t){var n=e.pendingLanes;if(n===0)return 0;var a=0,i=e.suspendedLanes,r=e.pingedLanes,o=n&268435455;if(o!==0){var s=o&~i;s!==0?a=Wa(s):(r&=o,r!==0&&(a=Wa(r)))}else o=n&~i,o!==0?a=Wa(o):r!==0&&(a=Wa(r));if(a===0)return 0;if(t!==0&&t!==a&&!(t&i)&&(i=a&-a,r=t&-t,i>=r||i===16&&(r&4194240)!==0))return t;if(a&4&&(a|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=a;0n;n++)t.push(e);return t}function ji(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-mt(t),e[t]=n}function xg(e,t){var n=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 a=e.eventTimes;for(e=e.expirationTimes;0=Ka),eu=" ",tu=!1;function um(e,t){switch(e){case"keyup":return Gg.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function cm(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Gn=!1;function Yg(e,t){switch(e){case"compositionend":return cm(t);case"keypress":return t.which!==32?null:(tu=!0,eu);case"textInput":return e=t.data,e===eu&&tu?null:e;default:return null}}function Kg(e,t){if(Gn)return e==="compositionend"||!zl&&um(e,t)?(e=lm(),er=Rl=Zt=null,Gn=!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)return{node:n,offset:t-e};e=a}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=ru(n)}}function gm(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?gm(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function hm(){for(var e=window,t=fr();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=fr(e.document)}return t}function Ul(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")}function oh(e){var t=hm(),n=e.focusedElem,a=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&gm(n.ownerDocument.documentElement,n)){if(a!==null&&Ul(n)){if(t=a.start,e=a.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var i=n.textContent.length,r=Math.min(a.start,i);a=a.end===void 0?r:Math.min(a.end,i),!e.extend&&r>a&&(i=a,a=r,r=i),i=ou(n,r);var o=ou(n,a);i&&o&&(e.rangeCount!==1||e.anchorNode!==i.node||e.anchorOffset!==i.offset||e.focusNode!==o.node||e.focusOffset!==o.offset)&&(t=t.createRange(),t.setStart(i.node,i.offset),e.removeAllRanges(),r>a?(e.addRange(t),e.extend(o.node,o.offset)):(t.setEnd(o.node,o.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Zn=null,Es=null,Ja=null,Ns=!1;function su(e,t,n){var a=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Ns||Zn==null||Zn!==fr(a)||(a=Zn,"selectionStart"in a&&Ul(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),Ja&&mi(Ja,a)||(Ja=a,a=Sr(Es,"onSelect"),0Xn||(e.current=Ds[Xn],Ds[Xn]=null,Xn--)}function re(e,t){Xn++,Ds[Xn]=e.current,e.current=t}var dn={},Ie=mn(dn),Be=mn(!1),En=dn;function pa(e,t){var n=e.type.contextTypes;if(!n)return dn;var a=e.stateNode;if(a&&a.__reactInternalMemoizedUnmaskedChildContext===t)return a.__reactInternalMemoizedMaskedChildContext;var i={},r;for(r in n)i[r]=t[r];return a&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function $e(e){return e=e.childContextTypes,e!=null}function kr(){se(Be),se(Ie)}function fu(e,t,n){if(Ie.current!==dn)throw Error(_(168));re(Ie,t),re(Be,n)}function Pm(e,t,n){var a=e.stateNode;if(t=t.childContextTypes,typeof a.getChildContext!="function")return n;a=a.getChildContext();for(var i in a)if(!(i in t))throw Error(_(108,tg(e)||"Unknown",i));return me({},n,a)}function Cr(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||dn,En=Ie.current,re(Ie,e),re(Be,Be.current),!0}function gu(e,t,n){var a=e.stateNode;if(!a)throw Error(_(169));n?(e=Pm(e,t,En),a.__reactInternalMemoizedMergedChildContext=e,se(Be),se(Ie),re(Ie,e)):se(Be),re(Be,n)}var Nt=null,lo=!1,Qo=!1;function _m(e){Nt===null?Nt=[e]:Nt.push(e)}function vh(e){lo=!0,_m(e)}function pn(){if(!Qo&&Nt!==null){Qo=!0;var e=0,t=ae;try{var n=Nt;for(ae=1;e>=o,i-=o,At=1<<32-mt(t)+i|n<z?(ne=q,q=null):ne=q.sibling;var G=h(g,q,y[z],b);if(G===null){q===null&&(q=ne);break}e&&q&&G.alternate===null&&t(g,q),m=r(G,m,z),I===null?j=G:I.sibling=G,I=G,q=ne}if(z===y.length)return n(g,q),de&&bn(g,z),j;if(q===null){for(;zz?(ne=q,q=null):ne=q.sibling;var be=h(g,q,G.value,b);if(be===null){q===null&&(q=ne);break}e&&q&&be.alternate===null&&t(g,q),m=r(be,m,z),I===null?j=be:I.sibling=be,I=be,q=ne}if(G.done)return n(g,q),de&&bn(g,z),j;if(q===null){for(;!G.done;z++,G=y.next())G=f(g,G.value,b),G!==null&&(m=r(G,m,z),I===null?j=G:I.sibling=G,I=G);return de&&bn(g,z),j}for(q=a(g,q);!G.done;z++,G=y.next())G=x(q,g,z,G.value,b),G!==null&&(e&&G.alternate!==null&&q.delete(G.key===null?z:G.key),m=r(G,m,z),I===null?j=G:I.sibling=G,I=G);return e&&q.forEach(function(U){return t(g,U)}),de&&bn(g,z),j}function P(g,m,y,b){if(typeof y=="object"&&y!==null&&y.type===Qn&&y.key===null&&(y=y.props.children),typeof y=="object"&&y!==null){switch(y.$$typeof){case qi:e:{for(var j=y.key,I=m;I!==null;){if(I.key===j){if(j=y.type,j===Qn){if(I.tag===7){n(g,I.sibling),m=i(I,y.props.children),m.return=g,g=m;break e}}else if(I.elementType===j||typeof j=="object"&&j!==null&&j.$$typeof===Ht&&vu(j)===I.type){n(g,I.sibling),m=i(I,y.props),m.ref=Ma(g,I,y),m.return=g,g=m;break e}n(g,I);break}else t(g,I);I=I.sibling}y.type===Qn?(m=jn(y.props.children,g.mode,b,y.key),m.return=g,g=m):(b=lr(y.type,y.key,y.props,null,g.mode,b),b.ref=Ma(g,m,y),b.return=g,g=b)}return o(g);case Wn:e:{for(I=y.key;m!==null;){if(m.key===I)if(m.tag===4&&m.stateNode.containerInfo===y.containerInfo&&m.stateNode.implementation===y.implementation){n(g,m.sibling),m=i(m,y.children||[]),m.return=g,g=m;break e}else{n(g,m);break}else t(g,m);m=m.sibling}m=ts(y,g.mode,b),m.return=g,g=m}return o(g);case Ht:return I=y._init,P(g,m,I(y._payload),b)}if(Va(y))return k(g,m,y,b);if(Ia(y))return v(g,m,y,b);Vi(g,y)}return typeof y=="string"&&y!==""||typeof y=="number"?(y=""+y,m!==null&&m.tag===6?(n(g,m.sibling),m=i(m,y),m.return=g,g=m):(n(g,m),m=es(y,g.mode,b),m.return=g,g=m),o(g)):n(g,m)}return P}var ga=Nm(!0),Am=Nm(!1),jr=mn(null),Tr=null,ta=null,$l=null;function Hl(){$l=ta=Tr=null}function Vl(e){var t=jr.current;se(jr),e._currentValue=t}function Us(e,t,n){for(;e!==null;){var a=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,a!==null&&(a.childLanes|=t)):a!==null&&(a.childLanes&t)!==t&&(a.childLanes|=t),e===n)break;e=e.return}}function da(e,t){Tr=e,$l=ta=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Oe=!0),e.firstContext=null)}function at(e){var t=e._currentValue;if($l!==e)if(e={context:e,memoizedValue:t,next:null},ta===null){if(Tr===null)throw Error(_(308));ta=e,Tr.dependencies={lanes:0,firstContext:e}}else ta=ta.next=e;return t}var kn=null;function Wl(e){kn===null?kn=[e]:kn.push(e)}function Im(e,t,n,a){var i=t.interleaved;return i===null?(n.next=n,Wl(t)):(n.next=i.next,i.next=n),t.interleaved=n,zt(e,a)}function zt(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var Vt=!1;function Ql(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Lm(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 qt(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function nn(e,t,n){var a=e.updateQueue;if(a===null)return null;if(a=a.shared,ee&2){var i=a.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),a.pending=t,zt(e,n)}return i=a.interleaved,i===null?(t.next=t,Wl(a)):(t.next=i.next,i.next=t),a.interleaved=t,zt(e,n)}function nr(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var a=t.lanes;a&=e.pendingLanes,n|=a,t.lanes=n,Il(e,n)}}function bu(e,t){var n=e.updateQueue,a=e.alternate;if(a!==null&&(a=a.updateQueue,n===a)){var i=null,r=null;if(n=n.firstBaseUpdate,n!==null){do{var o={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};r===null?i=r=o:r=r.next=o,n=n.next}while(n!==null);r===null?i=r=t:r=r.next=t}else i=r=t;n={baseState:a.baseState,firstBaseUpdate:i,lastBaseUpdate:r,shared:a.shared,effects:a.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Er(e,t,n,a){var i=e.updateQueue;Vt=!1;var r=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var l=s,u=l.next;l.next=null,o===null?r=u:o.next=u,o=l;var p=e.alternate;p!==null&&(p=p.updateQueue,s=p.lastBaseUpdate,s!==o&&(s===null?p.firstBaseUpdate=u:s.next=u,p.lastBaseUpdate=l))}if(r!==null){var f=i.baseState;o=0,p=u=l=null,s=r;do{var h=s.lane,x=s.eventTime;if((a&h)===h){p!==null&&(p=p.next={eventTime:x,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var k=e,v=s;switch(h=t,x=n,v.tag){case 1:if(k=v.payload,typeof k=="function"){f=k.call(x,f,h);break e}f=k;break e;case 3:k.flags=k.flags&-65537|128;case 0:if(k=v.payload,h=typeof k=="function"?k.call(x,f,h):k,h==null)break e;f=me({},f,h);break e;case 2:Vt=!0}}s.callback!==null&&s.lane!==0&&(e.flags|=64,h=i.effects,h===null?i.effects=[s]:h.push(s))}else x={eventTime:x,lane:h,tag:s.tag,payload:s.payload,callback:s.callback,next:null},p===null?(u=p=x,l=f):p=p.next=x,o|=h;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;h=s,s=h.next,h.next=null,i.lastBaseUpdate=h,i.shared.pending=null}}while(!0);if(p===null&&(l=f),i.baseState=l,i.firstBaseUpdate=u,i.lastBaseUpdate=p,t=i.shared.interleaved,t!==null){i=t;do o|=i.lane,i=i.next;while(i!==t)}else r===null&&(i.shared.lanes=0);In|=o,e.lanes=o,e.memoizedState=f}}function xu(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var a=Zo.transition;Zo.transition={};try{e(!1),t()}finally{ae=n,Zo.transition=a}}function Ym(){return it().memoizedState}function wh(e,t,n){var a=rn(e);if(n={lane:a,action:n,hasEagerState:!1,eagerState:null,next:null},Km(e))Xm(t,n);else if(n=Im(e,t,n,a),n!==null){var i=qe();pt(n,e,a,i),Jm(n,t,a)}}function kh(e,t,n){var a=rn(e),i={lane:a,action:n,hasEagerState:!1,eagerState:null,next:null};if(Km(e))Xm(t,i);else{var r=e.alternate;if(e.lanes===0&&(r===null||r.lanes===0)&&(r=t.lastRenderedReducer,r!==null))try{var o=t.lastRenderedState,s=r(o,n);if(i.hasEagerState=!0,i.eagerState=s,ft(s,o)){var l=t.interleaved;l===null?(i.next=i,Wl(t)):(i.next=l.next,l.next=i),t.interleaved=i;return}}catch{}finally{}n=Im(e,t,i,a),n!==null&&(i=qe(),pt(n,e,a,i),Jm(n,t,a))}}function Km(e){var t=e.alternate;return e===ce||t!==null&&t===ce}function Xm(e,t){ei=Ar=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Jm(e,t,n){if(n&4194240){var a=t.lanes;a&=e.pendingLanes,n|=a,t.lanes=n,Il(e,n)}}var Ir={readContext:at,useCallback:Ee,useContext:Ee,useEffect:Ee,useImperativeHandle:Ee,useInsertionEffect:Ee,useLayoutEffect:Ee,useMemo:Ee,useReducer:Ee,useRef:Ee,useState:Ee,useDebugValue:Ee,useDeferredValue:Ee,useTransition:Ee,useMutableSource:Ee,useSyncExternalStore:Ee,useId:Ee,unstable_isNewReconciler:!1},Ch={readContext:at,useCallback:function(e,t){return vt().memoizedState=[e,t===void 0?null:t],e},useContext:at,useEffect:wu,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,ir(4194308,4,Vm.bind(null,t,e),n)},useLayoutEffect:function(e,t){return ir(4194308,4,e,t)},useInsertionEffect:function(e,t){return ir(4,2,e,t)},useMemo:function(e,t){var n=vt();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var a=vt();return t=n!==void 0?n(t):t,a.memoizedState=a.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},a.queue=e,e=e.dispatch=wh.bind(null,ce,e),[a.memoizedState,e]},useRef:function(e){var t=vt();return e={current:e},t.memoizedState=e},useState:Su,useDebugValue:td,useDeferredValue:function(e){return vt().memoizedState=e},useTransition:function(){var e=Su(!1),t=e[0];return e=Sh.bind(null,e[1]),vt().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var a=ce,i=vt();if(de){if(n===void 0)throw Error(_(407));n=n()}else{if(n=t(),ke===null)throw Error(_(349));An&30||Mm(a,t,n)}i.memoizedState=n;var r={value:n,getSnapshot:t};return i.queue=r,wu(Um.bind(null,a,r,e),[e]),a.flags|=2048,xi(9,zm.bind(null,a,r,n,t),void 0,null),n},useId:function(){var e=vt(),t=ke.identifierPrefix;if(de){var n=It,a=At;n=(a&~(1<<32-mt(a)-1)).toString(32)+n,t=":"+t+"R"+n,n=vi++,0<\/script>",e=e.removeChild(e.firstChild)):typeof a.is=="string"?e=o.createElement(n,{is:a.is}):(e=o.createElement(n),n==="select"&&(o=e,a.multiple?o.multiple=!0:a.size&&(o.size=a.size))):e=o.createElementNS(e,n),e[bt]=t,e[gi]=a,dp(e,t,!1,!1),t.stateNode=e;e:{switch(o=Ss(n,a),n){case"dialog":oe("cancel",e),oe("close",e),i=a;break;case"iframe":case"object":case"embed":oe("load",e),i=a;break;case"video":case"audio":for(i=0;iva&&(t.flags|=128,a=!0,za(r,!1),t.lanes=4194304)}else{if(!a)if(e=Nr(o),e!==null){if(t.flags|=128,a=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),za(r,!0),r.tail===null&&r.tailMode==="hidden"&&!o.alternate&&!de)return Ne(t),null}else 2*ge()-r.renderingStartTime>va&&n!==1073741824&&(t.flags|=128,a=!0,za(r,!1),t.lanes=4194304);r.isBackwards?(o.sibling=t.child,t.child=o):(n=r.last,n!==null?n.sibling=o:t.child=o,r.last=o)}return r.tail!==null?(t=r.tail,r.rendering=t,r.tail=t.sibling,r.renderingStartTime=ge(),t.sibling=null,n=ue.current,re(ue,a?n&1|2:n&1),t):(Ne(t),null);case 22:case 23:return sd(),a=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==a&&(t.flags|=8192),a&&t.mode&1?We&1073741824&&(Ne(t),t.subtreeFlags&6&&(t.flags|=8192)):Ne(t),null;case 24:return null;case 25:return null}throw Error(_(156,t.tag))}function Ih(e,t){switch(Fl(t),t.tag){case 1:return $e(t.type)&&kr(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ha(),se(Be),se(Ie),Yl(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Zl(t),null;case 13:if(se(ue),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(_(340));fa()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return se(ue),null;case 4:return ha(),null;case 10:return Vl(t.type._context),null;case 22:case 23:return sd(),null;case 24:return null;default:return null}}var Qi=!1,Ae=!1,Lh=typeof WeakSet=="function"?WeakSet:Set,D=null;function na(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(a){pe(e,t,a)}else n.current=null}function Gs(e,t,n){try{n()}catch(a){pe(e,t,a)}}var Lu=!1;function qh(e,t){if(As=br,e=hm(),Ul(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var a=n.getSelection&&n.getSelection();if(a&&a.rangeCount!==0){n=a.anchorNode;var i=a.anchorOffset,r=a.focusNode;a=a.focusOffset;try{n.nodeType,r.nodeType}catch{n=null;break e}var o=0,s=-1,l=-1,u=0,p=0,f=e,h=null;t:for(;;){for(var x;f!==n||i!==0&&f.nodeType!==3||(s=o+i),f!==r||a!==0&&f.nodeType!==3||(l=o+a),f.nodeType===3&&(o+=f.nodeValue.length),(x=f.firstChild)!==null;)h=f,f=x;for(;;){if(f===e)break t;if(h===n&&++u===i&&(s=o),h===r&&++p===a&&(l=o),(x=f.nextSibling)!==null)break;f=h,h=f.parentNode}f=x}n=s===-1||l===-1?null:{start:s,end:l}}else n=null}n=n||{start:0,end:0}}else n=null;for(Is={focusedElem:e,selectionRange:n},br=!1,D=t;D!==null;)if(t=D,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,D=e;else for(;D!==null;){t=D;try{var k=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(k!==null){var v=k.memoizedProps,P=k.memoizedState,g=t.stateNode,m=g.getSnapshotBeforeUpdate(t.elementType===t.type?v:lt(t.type,v),P);g.__reactInternalSnapshotBeforeUpdate=m}break;case 3:var y=t.stateNode.containerInfo;y.nodeType===1?y.textContent="":y.nodeType===9&&y.documentElement&&y.removeChild(y.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(_(163))}}catch(b){pe(t,t.return,b)}if(e=t.sibling,e!==null){e.return=t.return,D=e;break}D=t.return}return k=Lu,Lu=!1,k}function ti(e,t,n){var a=t.updateQueue;if(a=a!==null?a.lastEffect:null,a!==null){var i=a=a.next;do{if((i.tag&e)===e){var r=i.destroy;i.destroy=void 0,r!==void 0&&Gs(t,n,r)}i=i.next}while(i!==a)}}function mo(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var a=n.create;n.destroy=a()}n=n.next}while(n!==t)}}function Zs(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function mp(e){var t=e.alternate;t!==null&&(e.alternate=null,mp(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[bt],delete t[gi],delete t[Rs],delete t[hh],delete t[yh])),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 pp(e){return e.tag===5||e.tag===3||e.tag===4}function qu(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||pp(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 Ys(e,t,n){var a=e.tag;if(a===5||a===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=wr));else if(a!==4&&(e=e.child,e!==null))for(Ys(e,t,n),e=e.sibling;e!==null;)Ys(e,t,n),e=e.sibling}function Ks(e,t,n){var a=e.tag;if(a===5||a===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(a!==4&&(e=e.child,e!==null))for(Ks(e,t,n),e=e.sibling;e!==null;)Ks(e,t,n),e=e.sibling}var Pe=null,dt=!1;function Bt(e,t,n){for(n=n.child;n!==null;)fp(e,t,n),n=n.sibling}function fp(e,t,n){if(xt&&typeof xt.onCommitFiberUnmount=="function")try{xt.onCommitFiberUnmount(ao,n)}catch{}switch(n.tag){case 5:Ae||na(n,t);case 6:var a=Pe,i=dt;Pe=null,Bt(e,t,n),Pe=a,dt=i,Pe!==null&&(dt?(e=Pe,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):Pe.removeChild(n.stateNode));break;case 18:Pe!==null&&(dt?(e=Pe,n=n.stateNode,e.nodeType===8?Wo(e.parentNode,n):e.nodeType===1&&Wo(e,n),ui(e)):Wo(Pe,n.stateNode));break;case 4:a=Pe,i=dt,Pe=n.stateNode.containerInfo,dt=!0,Bt(e,t,n),Pe=a,dt=i;break;case 0:case 11:case 14:case 15:if(!Ae&&(a=n.updateQueue,a!==null&&(a=a.lastEffect,a!==null))){i=a=a.next;do{var r=i,o=r.destroy;r=r.tag,o!==void 0&&(r&2||r&4)&&Gs(n,t,o),i=i.next}while(i!==a)}Bt(e,t,n);break;case 1:if(!Ae&&(na(n,t),a=n.stateNode,typeof a.componentWillUnmount=="function"))try{a.props=n.memoizedProps,a.state=n.memoizedState,a.componentWillUnmount()}catch(s){pe(n,t,s)}Bt(e,t,n);break;case 21:Bt(e,t,n);break;case 22:n.mode&1?(Ae=(a=Ae)||n.memoizedState!==null,Bt(e,t,n),Ae=a):Bt(e,t,n);break;default:Bt(e,t,n)}}function Ru(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new Lh),t.forEach(function(a){var i=$h.bind(null,e,a);n.has(a)||(n.add(a),a.then(i,i))})}}function st(e,t){var n=t.deletions;if(n!==null)for(var a=0;ai&&(i=o),a&=~r}if(a=i,a=ge()-a,a=(120>a?120:480>a?480:1080>a?1080:1920>a?1920:3e3>a?3e3:4320>a?4320:1960*Dh(a/1960))-a,10e?16:e,Yt===null)var a=!1;else{if(e=Yt,Yt=null,Rr=0,ee&6)throw Error(_(331));var i=ee;for(ee|=4,D=e.current;D!==null;){var r=D,o=r.child;if(D.flags&16){var s=r.deletions;if(s!==null){for(var l=0;lge()-rd?_n(e,0):id|=n),He(e,t)}function wp(e,t){t===0&&(e.mode&1?(t=zi,zi<<=1,!(zi&130023424)&&(zi=4194304)):t=1);var n=qe();e=zt(e,t),e!==null&&(ji(e,t,n),He(e,n))}function Bh(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),wp(e,n)}function $h(e,t){var n=0;switch(e.tag){case 13:var a=e.stateNode,i=e.memoizedState;i!==null&&(n=i.retryLane);break;case 19:a=e.stateNode;break;default:throw Error(_(314))}a!==null&&a.delete(t),wp(e,n)}var kp;kp=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||Be.current)Oe=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return Oe=!1,Nh(e,t,n);Oe=!!(e.flags&131072)}else Oe=!1,de&&t.flags&1048576&&jm(t,_r,t.index);switch(t.lanes=0,t.tag){case 2:var a=t.type;rr(e,t),e=t.pendingProps;var i=pa(t,Ie.current);da(t,n),i=Xl(null,t,a,e,i,n);var r=Jl();return t.flags|=1,typeof i=="object"&&i!==null&&typeof i.render=="function"&&i.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,$e(a)?(r=!0,Cr(t)):r=!1,t.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,Ql(t),i.updater=co,t.stateNode=i,i._reactInternals=t,Fs(t,a,e,n),t=Hs(null,t,a,!0,r,n)):(t.tag=0,de&&r&&Ol(t),Le(null,t,i,n),t=t.child),t;case 16:a=t.elementType;e:{switch(rr(e,t),e=t.pendingProps,i=a._init,a=i(a._payload),t.type=a,i=t.tag=Vh(a),e=lt(a,e),i){case 0:t=$s(null,t,a,e,n);break e;case 1:t=Nu(null,t,a,e,n);break e;case 11:t=Tu(null,t,a,e,n);break e;case 14:t=Eu(null,t,a,lt(a.type,e),n);break e}throw Error(_(306,a,""))}return t;case 0:return a=t.type,i=t.pendingProps,i=t.elementType===a?i:lt(a,i),$s(e,t,a,i,n);case 1:return a=t.type,i=t.pendingProps,i=t.elementType===a?i:lt(a,i),Nu(e,t,a,i,n);case 3:e:{if(op(t),e===null)throw Error(_(387));a=t.pendingProps,r=t.memoizedState,i=r.element,Lm(e,t),Er(t,a,null,n);var o=t.memoizedState;if(a=o.element,r.isDehydrated)if(r={element:a,isDehydrated:!1,cache:o.cache,pendingSuspenseBoundaries:o.pendingSuspenseBoundaries,transitions:o.transitions},t.updateQueue.baseState=r,t.memoizedState=r,t.flags&256){i=ya(Error(_(423)),t),t=Au(e,t,a,n,i);break e}else if(a!==i){i=ya(Error(_(424)),t),t=Au(e,t,a,n,i);break e}else for(Qe=tn(t.stateNode.containerInfo.firstChild),Ge=t,de=!0,ut=null,n=Am(t,null,a,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(fa(),a===i){t=Ut(e,t,n);break e}Le(e,t,a,n)}t=t.child}return t;case 5:return qm(t),e===null&&zs(t),a=t.type,i=t.pendingProps,r=e!==null?e.memoizedProps:null,o=i.children,Ls(a,i)?o=null:r!==null&&Ls(a,r)&&(t.flags|=32),rp(e,t),Le(e,t,o,n),t.child;case 6:return e===null&&zs(t),null;case 13:return sp(e,t,n);case 4:return Gl(t,t.stateNode.containerInfo),a=t.pendingProps,e===null?t.child=ga(t,null,a,n):Le(e,t,a,n),t.child;case 11:return a=t.type,i=t.pendingProps,i=t.elementType===a?i:lt(a,i),Tu(e,t,a,i,n);case 7:return Le(e,t,t.pendingProps,n),t.child;case 8:return Le(e,t,t.pendingProps.children,n),t.child;case 12:return Le(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(a=t.type._context,i=t.pendingProps,r=t.memoizedProps,o=i.value,re(jr,a._currentValue),a._currentValue=o,r!==null)if(ft(r.value,o)){if(r.children===i.children&&!Be.current){t=Ut(e,t,n);break e}}else for(r=t.child,r!==null&&(r.return=t);r!==null;){var s=r.dependencies;if(s!==null){o=r.child;for(var l=s.firstContext;l!==null;){if(l.context===a){if(r.tag===1){l=qt(-1,n&-n),l.tag=2;var u=r.updateQueue;if(u!==null){u=u.shared;var p=u.pending;p===null?l.next=l:(l.next=p.next,p.next=l),u.pending=l}}r.lanes|=n,l=r.alternate,l!==null&&(l.lanes|=n),Us(r.return,n,t),s.lanes|=n;break}l=l.next}}else if(r.tag===10)o=r.type===t.type?null:r.child;else if(r.tag===18){if(o=r.return,o===null)throw Error(_(341));o.lanes|=n,s=o.alternate,s!==null&&(s.lanes|=n),Us(o,n,t),o=r.sibling}else o=r.child;if(o!==null)o.return=r;else for(o=r;o!==null;){if(o===t){o=null;break}if(r=o.sibling,r!==null){r.return=o.return,o=r;break}o=o.return}r=o}Le(e,t,i.children,n),t=t.child}return t;case 9:return i=t.type,a=t.pendingProps.children,da(t,n),i=at(i),a=a(i),t.flags|=1,Le(e,t,a,n),t.child;case 14:return a=t.type,i=lt(a,t.pendingProps),i=lt(a.type,i),Eu(e,t,a,i,n);case 15:return ap(e,t,t.type,t.pendingProps,n);case 17:return a=t.type,i=t.pendingProps,i=t.elementType===a?i:lt(a,i),rr(e,t),t.tag=1,$e(a)?(e=!0,Cr(t)):e=!1,da(t,n),ep(t,a,i),Fs(t,a,i,n),Hs(null,t,a,!0,e,n);case 19:return lp(e,t,n);case 22:return ip(e,t,n)}throw Error(_(156,t.tag))};function Cp(e,t){return Kc(e,t)}function Hh(e,t,n,a){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=a,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function et(e,t,n,a){return new Hh(e,t,n,a)}function dd(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Vh(e){if(typeof e=="function")return dd(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Tl)return 11;if(e===El)return 14}return 2}function on(e,t){var n=e.alternate;return n===null?(n=et(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function lr(e,t,n,a,i,r){var o=2;if(a=e,typeof e=="function")dd(e)&&(o=1);else if(typeof e=="string")o=5;else e:switch(e){case Qn:return jn(n.children,i,r,t);case jl:o=8,i|=8;break;case cs:return e=et(12,n,t,i|2),e.elementType=cs,e.lanes=r,e;case ms:return e=et(13,n,t,i),e.elementType=ms,e.lanes=r,e;case ps:return e=et(19,n,t,i),e.elementType=ps,e.lanes=r,e;case qc:return fo(n,i,r,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Ic:o=10;break e;case Lc:o=9;break e;case Tl:o=11;break e;case El:o=14;break e;case Ht:o=16,a=null;break e}throw Error(_(130,e==null?e:typeof e,""))}return t=et(o,n,t,i),t.elementType=e,t.type=a,t.lanes=r,t}function jn(e,t,n,a){return e=et(7,e,a,t),e.lanes=n,e}function fo(e,t,n,a){return e=et(22,e,a,t),e.elementType=qc,e.lanes=n,e.stateNode={isHidden:!1},e}function es(e,t,n){return e=et(6,e,null,t),e.lanes=n,e}function ts(e,t,n){return t=et(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Wh(e,t,n,a,i){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=Ro(0),this.expirationTimes=Ro(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ro(0),this.identifierPrefix=a,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function ud(e,t,n,a,i,r,o,s,l){return e=new Wh(e,t,n,s,l),t===1?(t=1,r===!0&&(t|=8)):t=0,r=et(3,null,null,t),e.current=r,r.stateNode=e,r.memoizedState={element:a,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Ql(r),e}function Qh(e,t,n){var a=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Tp)}catch(e){console.error(e)}}Tp(),Tc.exports=Ye;var Xh=Tc.exports,Ep,$u=Xh;Ep=$u.createRoot,$u.hydrateRoot;const Np=[{code:"es",label:"Español"},{code:"en",label:"English"}],zr="es";function Jh(e){return Np.some(t=>t.code===e)}const ey={"common.loading":"Cargando…","common.back":"← Volver","common.notFound":"No encontrado.","common.yes":"Sí","common.no":"No","common.cancel":"Cancelar","notFound.intro":"Este es un portal de pedidos por negocio. Abre el enlace de un negocio para solicitar un pedido, por ejemplo:","gated.title":"Este sitio todavía no está activo","gated.body.subscriptionRequired":"El equipo de este negocio aún no activó su sitio público. Vuelve a intentarlo pronto, o contactanos por WhatsApp.","gated.body.setupIncomplete":"El negocio todavía está configurando su catálogo. Vuelve a intentarlo en unos días.","gated.body.suspended":"Este sitio público está temporalmente suspendido. Si crees que es un error, contactanos por WhatsApp.","gated.body.default":"Este sitio público todavía no está activo.","gated.contactWhatsapp":"Contactar por WhatsApp","landing.heading":"Nuestros productos","landing.empty":"Aún no hay productos disponibles.","landing.from":"Desde {price}","landing.customizeCta":"Personalizar y pedir","landing.viewCatalog":"Ver catálogo","landing.viewAll":"Ver todo el catálogo","landing.talkWhatsapp":"Hablar por WhatsApp","landing.contact":"Contacto","landing.hours":"Horario","landing.homeLink":"Ir a la página principal de la tienda","catalog.title":"Catálogo","catalog.allCategories":"Todos","catalog.featured":"Destacado","catalog.gridView":"Cuadrícula","catalog.listView":"Lista","catalog.status.available":"Disponible","catalog.status.under_request":"Bajo pedido","catalog.status.custom_made":"Hecho a medida","catalog.status.limited":"Disponibilidad limitada","detail.benefits":"Beneficios","detail.included":"Qué incluye","detail.notIncluded":"Qué no incluye","detail.deliveryTime":"Tiempo de entrega","detail.details":"Detalles","detail.faq":"Preguntas frecuentes","detail.related":"También te puede interesar","cart.title":"Tu pedido","cart.empty":"Tu pedido está vacío.","cart.addToCart":"Agregar al pedido","cart.update":"Actualizar artículo","cart.added":"Agregado a tu pedido","cart.continueBrowsing":"Seguir explorando","cart.viewCart":"Ver pedido","cart.remove":"Quitar","cart.edit":"Editar","cart.quantity":"Cantidad","cart.subtotal":"Subtotal","cart.total":"Total","cart.notes":"Comentarios","cart.notesPlaceholder":"¿Algo que debamos saber?","cart.generate":"Generar pedido","cart.generating":"Generando…","builder.yourDetails":"Tus datos","builder.name":"Nombre","builder.phone":"Teléfono","builder.email":"Correo electrónico","builder.request":"Solicitar pedido","builder.requesting":"Enviando…","builder.requiredError":"El nombre y el teléfono son obligatorios.","builder.submitFailed":"No se pudo enviar el pedido.","price.discount":"Descuento","price.tax":"Impuesto","price.total":"Total","confirm.title":"¡Pedido recibido!","confirm.summary":"Referencia {number} · Total {total}","confirm.openWhatsapp":"Abrir WhatsApp","confirm.copy":"Copiar mensaje","confirm.copied":"¡Copiado!","language.label":"Idioma","admin.nav.dashboard":"Panel","admin.nav.catalog":"Catálogo","admin.nav.quotes":"Pedidos","admin.nav.landing":"Página pública","admin.nav.branding":"Marca","admin.nav.team":"Equipo","admin.shell.noTenant":"Sin negocio","admin.shell.signOut":"Cerrar sesión","admin.login.subtitle":"Administración del negocio","admin.login.google":"Iniciar sesión con Google","admin.login.dev":"Inicio de sesión de desarrollo (local)","admin.login.callbackSigningIn":"Iniciando sesión…","admin.login.missingCode":"Falta el código de autorización.","admin.login.signInFailed":"Error al iniciar sesión.","admin.login.loadAccountFailed":"No se pudo cargar la cuenta.","admin.auth.brand":"Vendrae","admin.auth.tagline":"Pedidos para tu negocio, en piloto automático.","admin.auth.emailLabel":"Correo electrónico","admin.auth.passwordLabel":"Contraseña","admin.auth.nameLabel":"Tu nombre","admin.auth.namePlaceholder":"Ana Pérez","admin.auth.emailPlaceholder":"tu@empresa.com","admin.auth.passwordPlaceholder":"Mínimo 6 caracteres","admin.auth.signIn":"Iniciar sesión","admin.auth.signingIn":"Iniciando sesión…","admin.auth.signUp":"Crear cuenta","admin.auth.signingUp":"Creando cuenta…","admin.auth.orContinueWith":"o continúa con","admin.auth.continueWithGoogle":"Continuar con Google","admin.auth.googleDisabledTooltip":"El inicio con Google se habilita en los entornos desplegados.","admin.auth.noAccount":"¿No tienes una cuenta?","admin.auth.createOne":"Créala aquí","admin.auth.haveAccount":"¿Ya tienes una cuenta?","admin.auth.signInHere":"Inicia sesión","admin.auth.forgot":"¿Olvidaste tu contraseña?","admin.auth.devAffordance":"Atajo de desarrollo","admin.auth.devSignInQuick":"Entrar como Demo Owner","admin.auth.signupTitle":"Crea tu cuenta","admin.auth.signupSubtitle":"Empieza a recibir pedidos en minutos.","admin.auth.loginTitle":"Bienvenido de nuevo","admin.auth.loginSubtitle":"Inicia sesión para administrar tu negocio.","admin.auth.forgotTitle":"Recuperar acceso","admin.auth.forgotBody":"El restablecimiento por correo se habilitará al desplegar la autenticación real. Mientras tanto, escríbenos para recuperar tu cuenta.","admin.auth.backToLogin":"Volver a iniciar sesión","admin.auth.invalidEmail":"Ingresa un correo válido.","admin.auth.passwordTooShort":"La contraseña debe tener al menos 6 caracteres.","admin.auth.devModeBadge":"Modo desarrollo","admin.createBusiness.title":"Crea tu negocio","admin.createBusiness.subtitle":"Configura los datos básicos. Podrás editar todo más adelante; el subdominio queda fijo.","admin.createBusiness.nameLabel":"Nombre del negocio","admin.createBusiness.namePlaceholder":"Estudio Foto Quito","admin.createBusiness.industryLabel":"Industria","admin.createBusiness.industryPlaceholder":"Elige una opción…","admin.createBusiness.industrySelectPresetHint":"Esta industria se usará para sugerir tu plantilla en el próximo paso.","admin.createBusiness.slugLabel":"Subdominio público","admin.createBusiness.slugHelp":"Sólo minúsculas, números y guiones. 3–40 caracteres.","admin.createBusiness.slugChecking":"Verificando…","admin.createBusiness.slugAvailable":"Disponible","admin.createBusiness.slugReason.invalid":"Formato inválido.","admin.createBusiness.slugReason.reserved":"Este subdominio está reservado.","admin.createBusiness.slugReason.taken":"Ya está en uso.","admin.createBusiness.previewDev":"En desarrollo:","admin.createBusiness.previewProd":"En producción:","admin.createBusiness.descriptionLabel":"Descripción breve (opcional)","admin.createBusiness.descriptionPlaceholder":"Ej. Estudio especializado en fotografía de productos y retratos profesionales.","admin.createBusiness.whatsappLabel":"WhatsApp (opcional)","admin.createBusiness.whatsappHelp":"Sólo dígitos, con código de país. Ej. 593990435366","admin.createBusiness.contactEmailLabel":"Email de contacto (opcional)","admin.createBusiness.create":"Crear negocio","admin.createBusiness.creating":"Creando…","admin.createBusiness.slugLockNotice":"Después de crear, el subdominio no se puede cambiar (mantiene los enlaces estables).","admin.createBusiness.requiredField":"Este campo es obligatorio.","admin.createBusiness.fixSlugFirst":"Corrige el subdominio antes de continuar.","admin.tenant.selectHeading":"Selecciona un negocio","admin.guard.noMemberships":"Tu cuenta aún no pertenece a ningún negocio.","admin.dashboard.activeItems":"Productos activos","admin.dashboard.submittedQuotes":"Pedidos enviados","admin.dashboard.publicPage":"Página pública de pedidos","admin.dashboard.recentQuotes":"Pedidos recientes","admin.dashboard.noQuotes":"Aún no hay pedidos.","admin.dashboard.subtitle":"Resumen de tu actividad reciente.","admin.dashboard.openPublic":"Abrir página pública","admin.dashboard.copyLink":"Copiar enlace","admin.dashboard.linkCopied":"¡Copiado!","admin.dashboard.quotesToday":"Pedidos hoy","admin.dashboard.quotesThisWeek":"Esta semana","admin.dashboard.quotesPending":"Pendientes","admin.dashboard.quotesAccepted":"Aceptados","admin.dashboard.potentialValue":"Valor potencial","admin.dashboard.mostQuoted":"Producto más pedido","admin.dashboard.mostQuotedEmpty":"Aún no hay pedidos.","admin.dashboard.timesQuoted":"{n} pedido(s)","admin.dashboard.viewAll":"Ver todas","admin.dashboard.quickActions":"Acciones rápidas","admin.dashboard.actionNewProduct":"Crear producto","admin.dashboard.actionEditLanding":"Editar página pública","admin.dashboard.actionEditBranding":"Editar marca","admin.dashboard.actionViewQuotes":"Ver pedidos","admin.dashboard.needsAttention":"Productos a revisar","admin.dashboard.allGood":"Todo en orden.","admin.dashboard.fix":"Arreglar","admin.dashboard.reason.no_cover":"Falta imagen de portada","admin.dashboard.reason.not_published":"Sin publicar","admin.dashboard.reason.no_detail":"Falta contenido de detalle","admin.dashboard.reason.inactive":"Inactivo","admin.dashboard.setup":"Configuración inicial","admin.dashboard.do":"Hacer","admin.dashboard.checklist.branding":"Subir logo o favicon","admin.dashboard.checklist.whatsapp":"Configurar número de WhatsApp","admin.dashboard.checklist.firstProduct":"Publicar tu primer producto","admin.dashboard.checklist.landing":"Activar y publicar la página pública","admin.dashboard.checklist.testQuote":"Recibir tu primer pedido","admin.dashboard.continueSetup":"Continuar configuración","admin.onboarding.title":"Bienvenido, {name}","admin.onboarding.subtitle":"Revisemos juntos el contenido generado para tu negocio. Puedes pausar y retomar cuando quieras.","admin.onboarding.back":"Atrás","admin.onboarding.skip":"Saltar este paso","admin.onboarding.saving":"Guardando…","admin.onboarding.publish":"Guardar y publicar","admin.onboarding.continue":"Continuar","admin.onboarding.saveAndContinue":"Guardar y continuar","admin.onboarding.saveFailed":"No se pudo guardar.","admin.onboarding.step.welcome":"Bienvenida","admin.onboarding.step.industry":"Tu rubro","admin.onboarding.step.branding":"Marca","admin.onboarding.step.whatsapp":"WhatsApp","admin.onboarding.step.product":"Primer producto","admin.onboarding.step.landing":"Página pública","admin.onboarding.step.done":"Listo","admin.onboarding.industry.title":"¿A qué se dedica tu negocio?","admin.onboarding.industry.hint":"Elige uno para ajustar colores, mensajes y plantillas. Podrás personalizarlo todo después.","admin.onboarding.industry.name.3d_printing":"Impresión 3D","admin.onboarding.industry.name.wedding_photography":"Fotografía de bodas","admin.onboarding.industry.name.catering":"Catering y comida","admin.onboarding.industry.name.custom_gifts":"Regalos personalizados","admin.onboarding.industry.name.beauty":"Belleza y estética","admin.onboarding.industry.name.home_services":"Servicios para el hogar","admin.onboarding.industry.name.b2b":"B2B / Profesional","admin.onboarding.industry.name.printing":"Imprenta y papelería","admin.onboarding.industry.name.event_decoration":"Decoración de eventos","admin.onboarding.industry.tagline.3d_printing":"Objetos personalizados, impresión bajo pedido.","admin.onboarding.industry.tagline.wedding_photography":"Paquetes para tu día especial.","admin.onboarding.industry.tagline.catering":"Menús, eventos y servicios de banquete.","admin.onboarding.industry.tagline.custom_gifts":"Detalles únicos para cada ocasión.","admin.onboarding.industry.tagline.beauty":"Servicios y tratamientos.","admin.onboarding.industry.tagline.home_services":"Plomería, electricidad, limpieza y más.","admin.onboarding.industry.tagline.b2b":"Consultoría y soluciones corporativas.","admin.onboarding.industry.tagline.printing":"Impresión, branding y artes gráficas.","admin.onboarding.industry.tagline.event_decoration":"Bodas, cumpleaños, corporativos.","admin.onboarding.product.template.title":"Elige una plantilla","admin.onboarding.product.template.hint":"Empieza con campos de ejemplo para tu rubro. Podrás editarlos después en el editor de catálogo.","admin.onboarding.product.template.name.custom_physical":"Producto físico personalizable","admin.onboarding.product.template.name.service_package":"Paquete de servicio","admin.onboarding.product.template.name.add_on_service":"Servicio con complementos","admin.onboarding.product.template.name.quantity_measurement":"Producto por cantidad","admin.onboarding.product.template.name.premium_package":"Paquete premium","admin.onboarding.product.template.name.event_service":"Servicio para eventos","admin.onboarding.product.template.name.personalized_gift":"Regalo personalizado","admin.onboarding.product.template.desc.custom_physical":"Color, tamaño y notas adicionales.","admin.onboarding.product.template.desc.service_package":"Básico / Estándar / Premium.","admin.onboarding.product.template.desc.add_on_service":"Servicio base más complementos opcionales.","admin.onboarding.product.template.desc.quantity_measurement":"Precio por unidad o medida.","admin.onboarding.product.template.desc.premium_package":"Paquete principal con extras.","admin.onboarding.product.template.desc.event_service":"Por número de invitados + opciones.","admin.onboarding.product.template.desc.personalized_gift":"Texto a grabar + empaque opcional.","admin.urlImage.emptyHint":"Pega una URL de imagen para previsualizarla.","admin.urlImage.invalidUrl":"La URL no parece válida.","admin.urlImage.failedToLoad":"No se pudo cargar la imagen — revisa la URL.","admin.urlImage.clear":"Quitar","admin.imageUpload.emptyHint":"Arrastra una imagen aquí o elige un archivo.","admin.imageUpload.dropHint":"Suelta para subir","admin.imageUpload.uploading":"Subiendo…","admin.imageUpload.uploadFailed":"No se pudo subir — inténtalo de nuevo.","admin.imageUpload.remove":"Quitar","admin.imageUpload.chooseFile":"Elegir archivo","admin.imageUpload.useUrlInstead":"Usar URL en su lugar","admin.imageUpload.useUploadInstead":"Subir archivo en su lugar","admin.imageUpload.fileTooLarge":"El archivo es demasiado grande.","admin.imageUpload.invalidType":"Tipo de archivo no admitido.","admin.imageUpload.acceptedTypes":"JPEG, PNG o WebP","admin.imageUpload.addToGallery":"Añadir a la galería","seo.catalog.description":"Explora los productos personalizables de {name} y solicita tu pedido al instante por WhatsApp.","share.copy":"Copiar enlace","share.copied":"¡Copiado!","share.share":"Compartir","admin.onboarding.welcome.title":"Tu negocio está casi listo","admin.onboarding.welcome.body":"Revisemos juntos el contenido generado a partir de tu rubro. Podés editar o reemplazar todo lo que veas.","admin.onboarding.welcome.bullet1":"Marca: logo, colores y estilo visual.","admin.onboarding.welcome.bullet2":"WhatsApp: el número al que llegan los pedidos.","admin.onboarding.welcome.bullet3":"Tu primer producto o servicio.","admin.onboarding.welcome.bullet4":"Tu página pública: la portada que verán los clientes.","admin.onboarding.welcome.start":"Empezar","admin.onboarding.welcome.useDemoData":"Usar datos de demostración","admin.onboarding.branding.title":"Marca y estilo","admin.onboarding.branding.hint":"Estos colores y este estilo se reflejan en tu página pública. Puedes ajustarlos más tarde.","admin.onboarding.whatsapp.title":"Número de WhatsApp","admin.onboarding.whatsapp.hint":"Es a donde llegarán los pedidos. Solo dígitos, con código de país.","admin.onboarding.whatsapp.templateNote":"Los mensajes que se envían se editan luego en Marca → Mensajes de WhatsApp.","admin.onboarding.product.title":"Tu primer producto","admin.onboarding.product.hint":"Crea uno básico ahora; podrás añadir personalización completa después desde el catálogo.","admin.onboarding.product.name":"Nombre del producto","admin.onboarding.product.namePlaceholder":"p. ej. Caja personalizada","admin.onboarding.product.slugPlaceholder":"auto desde el nombre","admin.onboarding.product.basePrice":"Precio base (USD)","admin.onboarding.product.nameRequired":"El nombre es obligatorio.","admin.onboarding.product.create":"Crear producto","admin.onboarding.product.created":"Producto creado correctamente.","admin.onboarding.landing.title":"Tu página pública","admin.onboarding.landing.hint":"Esta es la portada que verán los clientes al abrir tu enlace. Edita el título y subtítulo.","admin.onboarding.landing.publishNote":"Al publicar, tu página estará en línea inmediatamente. Puedes seguir editándola desde Página pública.","admin.onboarding.done.title":"¡Todo listo!","admin.onboarding.done.body":"Tu portal está en línea. Comparte el enlace con tus clientes o abrelo para verlo como ellos.","admin.onboarding.done.publicUrlLabel":"Tu enlace público","admin.onboarding.done.previewAsCustomer":"Ver como cliente","admin.onboarding.done.openProduct":"Abrir producto","admin.onboarding.done.openDashboard":"Ir al panel","admin.onboarding.done.editCatalog":"Editar catálogo","admin.onboarding.step.catalog":"Productos","admin.onboarding.welcome.recap.heading":"Esto es lo que generamos para tu negocio:","admin.onboarding.welcome.recap.catalogCount":"{n} productos de inicio","admin.onboarding.welcome.recap.branding":"Branding con colores y estilo según tu rubro","admin.onboarding.welcome.recap.landing":"Página pública en borrador (lista para revisar)","admin.onboarding.welcome.recap.whatsapp":"Plantilla de WhatsApp preconfigurada","admin.onboarding.welcome.recap.empty":"No seleccionaste un rubro al crear el negocio, así que los próximos pasos vienen vacíos. Podés completarlos manualmente.","admin.onboarding.catalog.title":"Revisá tus productos","admin.onboarding.catalog.hint":"Productos generados como borradores. Hemos preparado productos iniciales para tu industria. Revísalos, edítalos y publícalos cuando estés listo. Mientras estén como borradores, no aparecerán en tu tienda pública.","admin.onboarding.catalog.draftNote":"Cada producto inicia en borrador: revisá precios, descripciones y opciones antes de publicar.","admin.onboarding.catalog.empty":"Tu catálogo está vacío.","admin.onboarding.catalog.emptyCta":"Crear un producto","admin.onboarding.catalog.publish":"Publicar","admin.onboarding.catalog.unpublish":"Ocultar","admin.onboarding.catalog.published":"Publicado","admin.onboarding.catalog.draft":"Borrador","admin.onboarding.catalog.hidden":"Oculto","admin.onboarding.catalog.edit":"Editar","admin.onboarding.catalog.publishAll":"Publicar todos","admin.onboarding.catalog.basePrice":"Precio base","admin.onboarding.summary.heading":"Resumen final","admin.onboarding.summary.businessName":"Negocio","admin.onboarding.summary.publicUrl":"URL pública","admin.onboarding.summary.itemCount":"{n} producto(s) en tu catálogo","admin.onboarding.summary.brandingApplied":"Branding aplicado","admin.onboarding.summary.whatsappApplied":"Plantillas de WhatsApp configuradas","admin.onboarding.summary.landingDraft":"Página pública en borrador","admin.onboarding.summary.landingPublished":"Página pública publicada","admin.onboarding.activate.heading":"¿Listo para activar tu sitio?","admin.onboarding.activate.body":"Activá el plan demo (sin cargo) para que tu sitio público sea visible para tus clientes.","admin.onboarding.activate.cta":"Activar plan demo","admin.onboarding.activate.continueWithout":"Continuar sin activar","admin.onboarding.activate.note":"El cobro real llegará en una versión posterior.","admin.catalog.title":"Catálogo","admin.catalog.newItem":"Nuevo artículo","admin.catalog.empty":"Aún no hay artículos.","admin.catalog.colName":"Nombre","admin.catalog.colType":"Tipo","admin.catalog.colBasePrice":"Precio base","admin.catalog.colActive":"Activo","admin.catalog.colCategory":"Categoría","admin.catalog.colStatus":"Estado","admin.catalog.featured":"Destacado","admin.catalog.storefront":"Tienda","admin.catalog.moveUp":"Subir","admin.catalog.moveDown":"Bajar","admin.catalog.edit":"Editar","admin.catalog.deleteAria":"Eliminar producto","admin.catalog.deleteConfirm.title":"Eliminar producto","admin.catalog.deleteConfirm.body":"Este producto dejará de aparecer en tu catálogo, pero los pedidos históricos se conservarán.","admin.catalog.deleteConfirm.cta":"Eliminar","admin.catalog.showDeleted":"Mostrar eliminados","admin.catalog.deletedBadge":"Eliminado","admin.catalog.restore":"Restaurar","admin.merch.title":"Ficha de tienda","admin.merch.category":"Categoría","admin.merch.badge":"Etiqueta","admin.merch.coverImageUrl":"URL de imagen de portada","admin.merch.shortDescription":"Descripción corta","admin.merch.status":"Disponibilidad","admin.merch.featured":"Destacar en la tienda","admin.merch.displayOrder":"Orden","admin.itemType.product":"Producto","admin.itemType.service":"Servicio","admin.itemType.package":"Paquete","admin.editor.newItem":"Nuevo artículo","admin.editor.editItem":"Editar artículo","admin.editor.untitledItem":"Artículo sin título","admin.editor.statusNew":"Nuevo","admin.editor.statusPublished":"Publicado","admin.editor.statusPublishedChanges":"Publicado · cambios sin publicar","admin.editor.statusDraft":"Borrador (no público)","admin.editor.design":"Diseño","admin.editor.preview":"Vista previa","admin.editor.saveDraft":"Guardar borrador","admin.editor.saving":"Guardando…","admin.editor.unpublish":"Despublicar","admin.editor.publish":"Publicar","admin.editor.draftSaved":"Borrador guardado.","admin.editor.saveFailed":"Error al guardar.","admin.editor.publishSaveFirst":"Guarda el borrador primero y luego publica.","admin.editor.fixIssues":"Corrige los problemas de configuración antes de publicar.","admin.editor.published":"Publicado — tus clientes ya ven estos cambios.","admin.editor.publishFailed":"Error al publicar.","admin.editor.unpublished":"Despublicado — oculto de la página pública.","admin.editor.failed":"Error.","admin.editor.configIssues":"Problemas de configuración:","admin.editor.previewContactNote":"Los clientes ingresan aquí sus datos de contacto.","admin.editor.previewUnavailable":"Vista previa no disponible — revisa el JSON de reglas de precios avanzadas.","admin.editor.selectElement":"Selecciona un elemento en el lienzo para editarlo.","admin.editor.pageSettingsGlance":"Configuración de página — título, imagen, precios, mensaje","admin.editor.canvasEmpty":"Diseña tu página de pedidos. Agrega una sección como «Personalización» o «Entrega», luego agrega los campos que los clientes completarán.","admin.editor.addSection":"Agregar sección","admin.editor.addField":"Agregar campo","admin.editor.sectionFallback":"Sección {n}","admin.editor.noFields":"Aún no hay campos.","admin.editor.informationBlock":"Bloque de información","admin.editor.untitledField":"Campo sin título","admin.editor.moveSectionUp":"Subir sección","admin.editor.moveSectionDown":"Bajar sección","admin.editor.removeSection":"Eliminar sección","admin.editor.moveFieldUp":"Subir campo","admin.editor.moveFieldDown":"Bajar campo","admin.editor.removeField":"Eliminar campo","admin.editor.glanceOption":"Opción","admin.editor.glanceNoOptions":"Aún no hay opciones","admin.editor.glanceToggle":"Interruptor · {label}","admin.editor.glanceNumber":"Número","admin.editor.glanceTextInput":"Entrada de texto","admin.editor.glanceFileUpload":"Carga de archivo (próximamente)","admin.editor.pageSettings":"Configuración de página","admin.editor.tabBasics":"Básico","admin.editor.tabVisual":"Visual","admin.editor.tabPricing":"Precios","admin.editor.tabMessage":"Mensaje","admin.editor.fieldName":"Nombre","admin.editor.fieldNameHint":"Se muestra a los clientes como título.","admin.editor.publicSlug":"Slug público","admin.editor.publicSlugHint":"URL de la página de pedido. minúsculas-con-guiones.","admin.editor.type":"Tipo","admin.editor.basePrice":"Precio base","admin.editor.basePriceHint":"Precio inicial antes de las personalizaciones.","admin.editor.currency":"Moneda","admin.editor.shortDescription":"Descripción corta","admin.editor.defaultImageUrl":"URL de imagen predeterminada","admin.editor.badge":"Etiqueta","admin.editor.badgeHint":"p. ej. «Más solicitado», «Nuevo».","admin.editor.displayTitle":"Título mostrado","admin.editor.displayTitleHint":"Reemplaza el nombre (opcional).","admin.editor.displaySubtitle":"Subtítulo mostrado","admin.editor.customerInstructions":"Instrucciones para el cliente","admin.editor.galleryUrls":"URLs de galería","admin.editor.galleryUrlsHint":"Una por línea.","admin.editor.pricingNote":"La mayoría de los precios se configuran en cada campo (ajustes de precio por opción, precio del interruptor, precio por unidad / por niveles). Usa las reglas avanzadas solo para descuentos condicionales.","admin.editor.advancedPricing":"Reglas de precios avanzadas (JSON)","admin.editor.advancedPricingHint":"Deja [] salvo que sea necesario.","admin.editor.messageNote":"El mensaje del pedido por WhatsApp. El número de destino se configura en Marca.","admin.editor.messageIntro":"Introducción del mensaje","admin.editor.messageOutro":"Cierre del mensaje","admin.editor.showBreakdown":"Mostrar desglose completo de precios (si no, solo el total)","admin.editor.labelsOnly":"Usar solo las etiquetas visibles para el cliente","admin.editor.section":"Sección","admin.editor.title":"Título","admin.editor.description":"Descripción","admin.editor.sectionDescHint":"Texto de ayuda opcional debajo del título de la sección.","admin.editor.field":"Campo","admin.editor.fieldType":"Tipo de campo","admin.editor.informationText":"Texto informativo","admin.editor.informationTextHint":"Se muestra al cliente; nunca afecta el precio.","admin.editor.label":"Etiqueta","admin.editor.key":"Clave","admin.editor.keyHint":"Id interno (automático desde la etiqueta si se deja vacío).","admin.editor.placeholder":"Marcador de posición","admin.editor.required":"Obligatorio","admin.editor.yesLabel":"Etiqueta de «Sí»","admin.editor.priceWhenEnabled":"Precio cuando está activo","admin.editor.imageWhenEnabled":"Imagen cuando está activo (URL)","admin.editor.min":"Mín","admin.editor.max":"Máx","admin.editor.step":"Paso","admin.editor.unitLabel":"Etiqueta de unidad","admin.editor.unitLabelHint":"p. ej. «unidades», «horas».","admin.editor.pricingMode":"Modo de precio","admin.editor.pricingNone":"Sin impacto en el precio","admin.editor.pricingPerUnit":"Precio fijo por unidad","admin.editor.pricingTiered":"Precio por niveles","admin.editor.pricePerUnit":"Precio por unidad","admin.editor.tiers":"Niveles","admin.editor.minQtyPlaceholder":"cant. mín","admin.editor.unitPricePlaceholder":"precio unitario","admin.editor.removeTier":"Eliminar nivel","admin.editor.addTier":"Agregar nivel","admin.editor.options":"Opciones","admin.editor.labelPlaceholder":"etiqueta","admin.editor.removeOption":"Eliminar opción","admin.editor.priceAdjPlaceholder":"± precio","admin.editor.imageUrlPlaceholder":"URL de imagen","admin.editor.addOption":"Agregar opción","admin.editor.minSelections":"Selecciones mín","admin.editor.maxSelections":"Selecciones máx","admin.editor.conditionToggle":"Mostrar solo cuando otro campo sea igual a un valor","admin.editor.conditionFieldPlaceholder":"— campo —","admin.editor.conditionEqualsPlaceholder":"igual a (true / clave de opción)","admin.editor.conditionAddFieldFirst":"Agrega otro campo primero.","admin.editor.previewDesktop":"Escritorio","admin.editor.previewMobile":"Móvil","admin.editor.validationCount":"{n} cosa(s) por resolver","admin.editor.addFieldTitle":"Agregar un campo","admin.editor.chooseFieldType":"Elige el tipo de campo que quieres agregar.","admin.editor.duplicateSection":"Duplicar sección","admin.editor.duplicateField":"Duplicar campo","admin.editor.moveFieldToSection":"Mover a la sección","admin.editor.affectsMessage":"Incluir esta respuesta en el mensaje de WhatsApp","admin.editor.addItem":"Agregar","admin.editor.removeItem":"Quitar","admin.editor.badgePrice":"Afecta el precio","admin.editor.badgeImage":"Cambia la imagen","admin.editor.badgeMessage":"En el mensaje","admin.editor.badgeConditional":"Condicional","admin.editor.badgeRequired":"Obligatorio","admin.editor.tabDetail":"Detalle","admin.editor.detailNote":"Contenido de la página de detalle del producto (antes de pedir).","admin.editor.benefits":"Beneficios","admin.editor.benefitsHint":"Puntos de venta destacados.","admin.editor.included":"Qué incluye","admin.editor.notIncluded":"Qué no incluye","admin.editor.deliveryTime":"Tiempo de entrega","admin.editor.deliveryTimeHint":"Ej.: «3 a 5 días hábiles».","admin.editor.detailsText":"Materiales y detalles","admin.editor.detailsTextHint":"Materiales, acabados o detalles del servicio.","admin.editor.faqs":"Preguntas frecuentes","admin.editor.faqQuestion":"Pregunta","admin.editor.faqAnswer":"Respuesta","admin.editor.addFaq":"Agregar pregunta","admin.editor.removeFaq":"Quitar pregunta","admin.fieldType.single_choice":"Opción única","admin.fieldType.multiple_choice":"Opción múltiple","admin.fieldType.boolean":"Interruptor Sí / No","admin.fieldType.quantity":"Cantidad","admin.fieldType.number":"Número","admin.fieldType.text":"Texto corto","admin.fieldType.textarea":"Texto largo","admin.fieldType.file_upload":"Carga de archivo","admin.fieldType.info":"Bloque de información","admin.fieldHint.single_choice":"El cliente elige una opción (p. ej. color, talla, zona de entrega).","admin.fieldHint.multiple_choice":"El cliente elige varias opciones (p. ej. complementos, accesorios).","admin.fieldHint.boolean":"Un complemento simple de sí/no (p. ej. envoltura de regalo).","admin.fieldHint.quantity":"Una cantidad numérica, con precio opcional por unidad o por niveles.","admin.fieldHint.number":"Un valor numérico libre (p. ej. ancho, asistentes).","admin.fieldHint.text":"Una entrada de texto corta (p. ej. nombre a grabar).","admin.fieldHint.textarea":"Instrucciones o notas más largas.","admin.fieldHint.file_upload":"Sube un logo o imagen de referencia (próximamente).","admin.fieldHint.info":"Una nota de solo lectura que se muestra al cliente; nunca afecta el precio.","admin.landing.title":"Página pública","admin.landing.openPublic":"Ver página pública","admin.landing.saveDraft":"Guardar borrador","admin.landing.saving":"Guardando…","admin.landing.publish":"Publicar","admin.landing.draftSaved":"Borrador guardado.","admin.landing.saveFailed":"No se pudo guardar.","admin.landing.published":"Página publicada.","admin.landing.publishFailed":"No se pudo publicar.","admin.landing.statusPublished":"Publicada","admin.landing.statusPublishedChanges":"Cambios sin publicar","admin.landing.statusNeverPublished":"Sin publicar","admin.landing.disabledHint":"La página pública está desactivada. Al desactivarla, los visitantes verán el catálogo simple.","admin.landing.sectionVisible":"Mostrar esta sección","admin.landing.heading":"Título","admin.landing.subheading":"Subtítulo","admin.landing.tabGeneral":"General","admin.landing.tabHero":"Portada","admin.landing.tabFeatured":"Destacados","admin.landing.tabHow":"Cómo funciona","admin.landing.tabBenefits":"Beneficios","admin.landing.tabTestimonials":"Testimonios","admin.landing.tabFaq":"Preguntas","admin.landing.tabContact":"Contacto","admin.landing.generalHint":"Activa la página pública para mostrar la portada y secciones; desactivada se muestra el catálogo simple.","admin.landing.enabledLabel":"Activar página pública","admin.landing.heroTitle":"Título principal","admin.landing.heroSubtitle":"Subtítulo","admin.landing.heroDescription":"Descripción","admin.landing.heroTextColors.title":"Color del texto de portada","admin.landing.heroTextColors.mode.auto":"Automático (predeterminado)","admin.landing.heroTextColors.mode.single":"Un solo color para todos los textos","admin.landing.heroTextColors.mode.custom":"Color personalizado por campo","admin.landing.heroTextColors.singleColor":"Color del texto","admin.landing.heroTextColors.titleColor":"Color del título","admin.landing.heroTextColors.subtitleColor":"Color del subtítulo","admin.landing.heroTextColors.descriptionColor":"Color de la descripción","admin.landing.heroTextColors.movedHint":"Los colores del texto de portada ahora se editan desde la página de Marca.","admin.branding.heroTextColorsCardTitle":"Color del texto de portada","admin.landing.heroImageUrl":"URL de la imagen de portada","admin.landing.heroImageHint":"Imagen grande mostrada junto al título. Déjala vacía para usar un fondo de color.","admin.landing.heroPrimaryCtaLabel":"Botón principal","admin.landing.heroPrimaryCtaTarget":"Destino del botón principal","admin.landing.heroSecondaryCtaLabel":"Botón secundario","admin.landing.heroSecondaryCtaTarget":"Destino del botón secundario","admin.landing.ctaTarget.catalog":"Catálogo","admin.landing.ctaTarget.whatsapp":"WhatsApp","admin.landing.featuredMode":"Modo de selección","admin.landing.featuredModeAuto":"Automático (los más recientes)","admin.landing.featuredModeManual":"Manual (elige los productos)","admin.landing.featuredLimit":"Cuántos mostrar","admin.landing.featuredItemSlugs":"Slugs de productos","admin.landing.featuredItemSlugsHint":"Uno por línea (el «slug» que aparece en la URL del producto).","admin.landing.steps":"Pasos","admin.landing.addStep":"Agregar paso","admin.landing.removeStep":"Quitar paso","admin.landing.stepTitle":"Título del paso","admin.landing.stepDescription":"Descripción","admin.landing.benefitsItems":"Beneficios","admin.landing.addBenefit":"Agregar beneficio","admin.landing.removeBenefit":"Quitar beneficio","admin.landing.benefitTitle":"Título","admin.landing.benefitDescription":"Descripción","admin.landing.benefitIcon.check":"Verificado","admin.landing.benefitIcon.sparkles":"Destellos","admin.landing.benefitIcon.bolt":"Rayo","admin.landing.benefitIcon.receipt":"Recibo","admin.landing.benefitIcon.chat":"Chat","admin.landing.benefitIcon.shield":"Escudo","admin.landing.benefitIcon.clock":"Reloj","admin.landing.addTestimonial":"Agregar testimonio","admin.landing.removeTestimonial":"Quitar testimonio","admin.landing.testimonialName":"Nombre del cliente","admin.landing.testimonialComment":"Comentario","admin.landing.testimonialAvatarUrl":"URL del avatar (opcional)","admin.landing.addFaq":"Agregar pregunta","admin.landing.removeFaq":"Quitar pregunta","admin.landing.faqQuestion":"Pregunta","admin.landing.faqAnswer":"Respuesta","admin.landing.footerTagline":"Eslogan","admin.landing.footerBackgroundColor":"Color de fondo","admin.landing.footerTextColor":"Color del texto","admin.landing.footerLogoMode":"Logo del pie de página","admin.landing.footerLogoMode.business":"Usar logo del negocio","admin.landing.footerLogoMode.custom":"Subir logo de pie de página","admin.landing.footerLogoMode.text":"Solo texto","admin.landing.footerCustomLogo":"Logo personalizado del pie","admin.landing.footerShowContactInfo":"Mostrar información de contacto","admin.landing.footerShowSocialLinks":"Mostrar redes sociales","admin.landing.footerWhatsapp":"WhatsApp","admin.landing.footerWhatsappHint":"Número con código de país (ej.: 593990000000).","admin.landing.footerInstagram":"Instagram","admin.landing.footerEmail":"Correo","admin.landing.footerAddress":"Dirección","admin.landing.footerHours":"Horario","admin.quotes.title":"Pedidos","admin.quotes.allStatuses":"Todos los estados","admin.quotes.empty":"No hay pedidos.","admin.quotes.emptyFiltered":"Ningún pedido coincide con los filtros.","admin.quotes.colNumber":"Número","admin.quotes.colCustomer":"Cliente","admin.quotes.colContact":"Contacto","admin.quotes.colTotal":"Total","admin.quotes.colStatus":"Estado","admin.quotes.colCreated":"Creado","admin.quotes.filterStatus":"Estado","admin.quotes.filterProduct":"Producto","admin.quotes.filterAllProducts":"Todos los productos","admin.quotes.filterFrom":"Desde","admin.quotes.filterTo":"Hasta","admin.quotes.filterSearch":"Buscar cliente","admin.quotes.filterSearchPlaceholder":"Nombre, correo o teléfono…","admin.quotes.clearFilters":"Limpiar filtros","admin.quotes.view.active":"Activos","admin.quotes.view.archived":"Archivados","admin.quotes.view.deleted":"Eliminados","admin.quotes.view.all":"Todos","admin.manualQuote.title":"Nuevo pedido","admin.manualQuote.newButton":"Nuevo pedido","admin.manualQuote.cancel":"Cancelar","admin.manualQuote.customerSection":"Cliente","admin.manualQuote.customerName":"Nombre del cliente","admin.manualQuote.whatsapp":"WhatsApp","admin.manualQuote.phone":"Teléfono","admin.manualQuote.email":"Correo electrónico","admin.manualQuote.internalNotes":"Notas internas","admin.manualQuote.validation.nameRequired":"El nombre del cliente es obligatorio.","admin.manualQuote.saveFailed":"No se pudo crear el pedido.","admin.manualQuote.forbidden":"No tienes permiso para crear pedidos.","admin.quotes.archive":"Archivar","admin.quotes.delete":"Eliminar","admin.quotes.restore":"Restaurar","admin.quotes.deleteConfirm.title":"Eliminar pedido","admin.quotes.deleteConfirm.body":"El pedido se ocultará de la lista. Podrás encontrarlo en la pestaña Eliminados. Esta acción no afecta los registros históricos.","admin.quotes.deleteConfirm.cta":"Eliminar","admin.quotes.archiveConfirm.title":"Archivar pedido","admin.quotes.archiveConfirm.body":"El pedido se moverá a Archivados y dejará de aparecer en la lista principal.","admin.quotes.colActions":"Acciones","admin.quote.customer":"Cliente","admin.quote.customerEdit":"Editar","admin.quote.customerEditTitle":"Editar datos del cliente","admin.quote.customerEditSave":"Guardar","admin.quote.customerEditSaveFailed":"No se pudieron actualizar los datos del cliente.","admin.quote.total":"Total","admin.quote.changeStatus":"Cambiar estado","admin.quote.noTransitions":"No se permiten más transiciones.","admin.quote.selectPlaceholder":"Selecciona…","admin.quote.apply":"Aplicar","admin.quote.updating":"Actualizando…","admin.quote.updateFailed":"Error al actualizar.","admin.quote.activity":"Actividad","admin.activity.statusChangedFromTo":"Estado cambiado de {from} a {to}","admin.activity.statusChangedTo":"Estado cambiado a {to}","admin.activity.statusOverride":"Cambio por administrador: estado de {from} a {to}","admin.activity.pedidoRevisionCreated":"Nueva revisión #{number} creada","admin.activity.itemPriceOverridden":"Precio de un ítem ajustado","admin.activity.discountApplied":"Descuento aplicado","admin.activity.chargeAdded":"Cargo añadido","admin.activity.proposalSent":"Propuesta enviada al cliente","admin.activity.pedidoFinalized":"Pedido finalizado","admin.activity.manualLineItemAdded":"Línea añadida manualmente","admin.activity.lineItemRemoved":"Línea eliminada","admin.activity.manualPedidoCreated":"Pedido manual creado desde administración","admin.activity.pedidoDeleted":"Pedido eliminado","admin.activity.customerUpdated":"Datos del cliente actualizados","admin.branding.title":"Marca","admin.branding.logoUrl":"URL del logo","admin.branding.faviconUrl":"URL del favicon","admin.branding.primaryColor":"Color primario","admin.branding.secondaryColor":"Color secundario","admin.branding.accentColor":"Color de acento","admin.branding.accentAuto":"Automático desde el primario","admin.branding.whatsappNumber":"Número de WhatsApp","admin.branding.whatsappNumberHint":"Solo dígitos, p. ej. 593990435366","admin.branding.saved":"Guardado.","admin.branding.save":"Guardar","admin.branding.saving":"Guardando…","admin.branding.saveFailed":"Error al guardar.","admin.branding.whatsappTitle":"Mensajes de WhatsApp","admin.branding.whatsappNote":"Personaliza los mensajes para cada momento del proceso. Deja un idioma vacío para usar el predeterminado.","admin.whatsapp.kind.customer_quote":"Pedido del cliente","admin.whatsapp.kind.business_followup":"Seguimiento","admin.whatsapp.kind.business_accepted":"Pedido aceptado","admin.whatsapp.kind.business_rejected":"Pedido rechazado","admin.whatsapp.kind.business_updated_proposal":"Propuesta actualizada","admin.whatsapp.kind.business_final_order":"Pedido finalizado","admin.whatsapp.kind.business_confirmation_request":"Solicitar confirmación","admin.whatsapp.kindHint.customer_quote":"Mensaje que enviará el cliente al solicitar su pedido por WhatsApp.","admin.whatsapp.kindHint.business_followup":"Mensaje que envías tú al cliente después de recibir su pedido.","admin.whatsapp.kindHint.business_accepted":"Mensaje que envías al confirmar y aceptar el pedido.","admin.whatsapp.kindHint.business_rejected":"Mensaje cortés para declinar un pedido.","admin.whatsapp.kindHint.business_updated_proposal":"Mensaje con la propuesta revisada: lista los artículos, totales y notas para el cliente.","admin.whatsapp.kindHint.business_final_order":"Resumen final que envías cuando el pedido queda confirmado y cerrado.","admin.whatsapp.kindHint.business_confirmation_request":"Recordatorio amable para que el cliente confirme antes de avanzar.","admin.whatsapp.group.presale":"Pre-venta","admin.whatsapp.group.postsale":"Post-venta","admin.whatsapp.tone.friendly":"Amigable","admin.whatsapp.tone.formal":"Formal","admin.whatsapp.tone.premium":"Premium","admin.whatsapp.tone.short":"Corto","admin.whatsapp.applyTone":"Aplicar tono","admin.whatsapp.applyToneApplied":"Tono aplicado.","admin.whatsapp.useDefault":"Usar predeterminado","admin.whatsapp.usingDefault":"Usando el predeterminado del sistema.","admin.whatsapp.placeholdersTitle":"Marcadores disponibles","admin.whatsapp.placeholdersHint":"Haz clic en un marcador para insertarlo en el cursor.","admin.whatsapp.previewTitle":"Vista previa con datos de ejemplo","admin.whatsapp.previewHint":"Vista previa con datos ficticios. Los marcadores se sustituyen al enviar.","admin.whatsapp.toneRow":"Tono sugerido","admin.branding.colorsTitle":"Colores","admin.branding.themeTitle":"Estilo visual","admin.branding.preset":"Preajuste","admin.branding.backgroundStyle":"Fondo","admin.branding.cornerStyle":"Esquinas","admin.branding.buttonStyle":"Botones","admin.branding.cardStyle":"Tarjetas","admin.branding.previewTitle":"Vista previa","admin.branding.reset":"Restablecer tema","admin.branding.viewPublicPage":"Ver página pública","admin.branding.publicUrlLabel":"URL pública de la tienda","admin.branding.subdomainUpgradeNote":"El subdominio propio (slug.vendrae.app) está disponible desde el plan Basic.","admin.branding.contrastWarn":"Contraste bajo: {label} ({ratio}:1)","admin.branding.contrastTextNeeds":"El texto necesita al menos 4.5:1.","admin.branding.previewHeroTitle":"Tu negocio, tu estilo","admin.branding.previewCta":"Pedir ahora","admin.branding.previewCardTitle":"Producto de ejemplo","admin.branding.previewLink":"Personalizar y pedir","admin.preset.minimal":"Minimalista","admin.preset.premium":"Premium","admin.preset.friendly":"Amigable","admin.preset.bold":"Atrevido","admin.preset.elegant":"Elegante","admin.preset.playful":"Divertido","admin.preset.custom":"Personalizado","admin.themeOpt.solid":"Sólido","admin.themeOpt.gradient":"Degradado","admin.themeOpt.sharp":"Rectas","admin.themeOpt.rounded":"Redondeadas","admin.themeOpt.pill":"Píldora","admin.themeOpt.outline":"Contorno","admin.themeOpt.flat":"Plano","admin.themeOpt.elevated":"Elevado","admin.quote.notes":"Comentarios del cliente","admin.quote.grandTotal":"Total del pedido","admin.quote.openWhatsapp":"Abrir WhatsApp","admin.quote.copyFollowUp":"Copiar mensaje de seguimiento","admin.quote.copied":"¡Copiado!","admin.quote.followUpHi":"Hola {name}, gracias por tu interés.","admin.quote.followUpHiAnon":"Hola, gracias por tu interés.","admin.quote.followUpRef":"Sobre tu pedido {number} ({total}):","admin.quote.followUpClose":"¿En qué te podemos ayudar para avanzar?","admin.quote.internalNotes":"Notas internas","admin.quote.internalNotesHint":"Solo el equipo las ve. Útiles para registrar contactos y acuerdos.","admin.quote.noNotesYet":"Aún no hay notas.","admin.quote.unknownAuthor":"Sin autor","admin.quote.notePlaceholder":"Escribe una nota interna…","admin.quote.addNote":"Agregar nota","admin.quote.savingNote":"Guardando…","admin.quote.noteFailed":"No se pudo guardar la nota.","admin.quote.markAs.contacted":"Marcar contactado","admin.quote.markAs.in_negotiation":"En negociación","admin.quote.markAs.accepted":"Aceptar","admin.quote.markAs.rejected":"Rechazar","admin.quote.sendAccepted":"Enviar aceptación","admin.quote.sendRejected":"Enviar rechazo","admin.quote.copyAccepted":"Copiar aceptación","admin.quote.copyRejected":"Copiar rechazo","admin.quote.statusMenu.label":"Cambiar estado","admin.quote.statusMenu.heading":"Mover a","admin.quote.statusMenu.terminal":"No se permiten más transiciones.","admin.quote.statusMenu.addStatus":"Nuevo estado…","admin.quote.statusMenu.confirmContinue":"Continuar","admin.quote.statusMenu.confirmCancel":"Cancelar","admin.quote.statusModal.title":"Cambiar estado","admin.quote.statusModal.confirmIrreversible":"Este es un cambio irreversible para este estado. ¿Continuar?","admin.quote.statusModal.search":"Buscar estados…","admin.quote.postStatus.accepted":"Marcado como aceptado. ¿Enviar mensaje de aceptación?","admin.quote.postStatus.rejected":"Marcado como rechazado. ¿Enviar mensaje de rechazo?","admin.quote.postStatus.dismiss":"Descartar","admin.quote.eventsCount":"{count} eventos","admin.quote.notesCount":"{count} notas","admin.quote.revisionsCount":"{count} revisiones","admin.quote.itemBreakdown.show":"Ver desglose","admin.quote.itemBreakdown.hide":"Ocultar desglose","admin.pedido.history.title":"Historial de revisiones","admin.pedido.history.empty":"Aún no hay revisiones guardadas para este pedido.","admin.pedido.history.revisionLabel":"Revisión #{number}","admin.pedido.history.itemsCount":"{count} artículos","admin.pedido.history.created":"Creada {when}","admin.pedido.history.viewItems":"Ver artículos","admin.pedido.history.hideItems":"Ocultar artículos","admin.pedido.revisionStatus.draft":"Borrador","admin.pedido.revisionStatus.sent":"Enviada","admin.pedido.revisionStatus.finalized":"Finalizada","admin.pedido.revisionStatus.superseded":"Sustituida","admin.pedido.summary.title":"Detalle del pedido","admin.pedido.summary.noneYet":"Aún no se ha guardado ninguna revisión.","admin.pedido.summary.latestRevision":"Revisión actual: #{number}","admin.pedido.summary.subtotal":"Subtotal","admin.pedido.summary.discount":"Descuentos","admin.pedido.summary.charges":"Cargos","admin.pedido.summary.total":"Total","admin.pedido.loadFailed":"No se pudo cargar el historial de revisiones.","admin.pedido.editor.title":"Editar pedido","admin.pedido.editor.readOnly":"Solo lectura","admin.pedido.editor.finalizedBadge":"Pedido finalizado","admin.pedido.editor.items.title":"Artículos","admin.pedido.editor.items.name":"Artículo","admin.pedido.editor.items.quantity":"Cantidad","admin.pedido.editor.items.unitPrice":"Precio unitario","admin.pedido.editor.items.lineDiscount":"Descuento del artículo","admin.pedido.editor.items.lineTotal":"Total del artículo","admin.pedido.editor.items.remove":"Quitar","admin.pedido.editor.items.addManual":"Añadir artículo manual","admin.pedido.editor.items.addFromCatalog":"Añadir del catálogo","admin.pedido.editor.items.catalogPlaceholder":"Selecciona un artículo…","admin.pedido.editor.items.catalogEmpty":"Aún no hay artículos en el catálogo.","admin.pedido.editor.items.newName":"Artículo personalizado","admin.pedido.editor.items.empty":"Añade al menos un artículo para guardar la revisión.","admin.pedido.editor.adjustments.title":"Descuentos y cargos","admin.pedido.editor.adjustments.add":"Añadir ajuste","admin.pedido.editor.adjustments.label":"Concepto","admin.pedido.editor.adjustments.type.discount":"Descuento","admin.pedido.editor.adjustments.type.charge":"Cargo","admin.pedido.editor.adjustments.amountType.fixed":"Monto fijo","admin.pedido.editor.adjustments.amountType.percentage":"Porcentaje","admin.pedido.editor.adjustments.amount":"Monto","admin.pedido.editor.adjustments.reason":"Motivo (opcional)","admin.pedido.editor.adjustments.headerType":"Tipo","admin.pedido.editor.adjustments.headerAmountType":"Tipo de monto","admin.pedido.editor.notes.customer":"Notas para el cliente","admin.pedido.editor.notes.customerPlaceholder":"Detalles que verá el cliente en la propuesta…","admin.pedido.editor.totals.subtotal":"Subtotal","admin.pedido.editor.totals.discount":"Descuentos","admin.pedido.editor.totals.charges":"Cargos","admin.pedido.editor.totals.total":"Total","admin.pedido.editor.actions.saveDraft":"Guardar borrador","admin.pedido.editor.actions.saveAndSend":"Guardar y enviar propuesta","admin.pedido.editor.actions.finalize":"Finalizar pedido","admin.pedido.editor.actions.saving":"Guardando…","admin.pedido.editor.actions.sending":"Enviando…","admin.pedido.editor.actions.finalizing":"Finalizando…","admin.pedido.editor.validation.itemsRequired":"Añade al menos un artículo antes de guardar.","admin.pedido.editor.validation.finalizeBlocked":"Marca el pedido como aceptado antes de finalizarlo.","admin.pedido.editor.saveFailed":"No se pudo guardar la revisión.","admin.pedido.editor.sentSuccess":"Propuesta enviada al cliente.","admin.pedido.editor.finalizeSuccess":"Pedido finalizado.","admin.pedido.editor.draftSavedSuccess":"Borrador guardado.","admin.pedido.message.title":"Mensaje para el cliente","admin.pedido.message.openWhatsapp":"Abrir WhatsApp","admin.pedido.message.copy":"Copiar mensaje","admin.pedido.message.copied":"¡Copiado!","admin.pedido.message.missingPhone":"Añade un teléfono al cliente para abrir WhatsApp.","admin.pedido.message.requestConfirmation":"Solicitar confirmación","admin.pedido.message.confirmationCopied":"Mensaje de confirmación copiado.","admin.pedido.message.finalSummaryTitle":"Resumen final del pedido","admin.pedido.message.copyFinalSummary":"Copiar resumen final","admin.team.title":"Equipo","admin.team.role":"Rol: {role}","admin.team.future":"Invitar compañeros y gestionar roles está planeado para una versión futura.","admin.nav.settings":"Configuración","admin.nav.businessProfile":"Perfil del negocio","admin.settings.businessProfile.title":"Perfil del negocio","admin.settings.businessProfile.subtitle":"Configura la información comercial que tus clientes verán en tu página pública y pedidos.","admin.settings.businessProfile.openPublic":"Ver página pública","admin.settings.businessProfile.copyLink":"Copiar link","admin.settings.businessProfile.linkCopied":"Link copiado","admin.settings.businessProfile.save":"Guardar cambios","admin.settings.businessProfile.saving":"Guardando…","admin.settings.businessProfile.saved":"Perfil actualizado","admin.settings.businessProfile.saveFailed":"No se pudo guardar el perfil. Inténtalo de nuevo.","admin.settings.businessProfile.loadFailed":"No se pudo cargar el perfil.","admin.settings.businessProfile.cardIdentity":"Identidad","admin.settings.businessProfile.cardContact":"Contacto","admin.settings.businessProfile.cardSocial":"Redes y enlaces","admin.settings.businessProfile.cardDisclaimer":"Aviso en pedidos","admin.settings.businessProfile.cardPreview":"Vista previa pública","admin.settings.businessProfile.businessName":"Nombre del negocio","admin.settings.businessProfile.publicSlug":"URL pública","admin.settings.businessProfile.publicSlugHint":"Por seguridad esta URL no se edita desde aquí en la demo.","admin.settings.businessProfile.industry":"Industria","admin.settings.businessProfile.industryPlaceholder":"Ej. Impresión 3D, Catering, Fotografía","admin.settings.businessProfile.description":"Descripción corta","admin.settings.businessProfile.descriptionHint":"Aparece como subtítulo de respaldo en tu landing y como metadato público.","admin.settings.businessProfile.defaultLanguage":"Idioma predeterminado","admin.settings.businessProfile.defaultCurrency":"Moneda","admin.settings.businessProfile.whatsappNumber":"WhatsApp","admin.settings.businessProfile.whatsappNumberHint":"Sólo dígitos, incluyendo código de país. Se usa para pedidos y mensajes.","admin.settings.businessProfile.email":"Correo de contacto","admin.settings.businessProfile.phone":"Teléfono","admin.settings.businessProfile.addressLine":"Dirección","admin.settings.businessProfile.city":"Ciudad","admin.settings.businessProfile.country":"País","admin.settings.businessProfile.serviceArea":"Área de servicio","admin.settings.businessProfile.serviceAreaPlaceholder":"Ej. Guayaquil y Samborondón · Online · Nacional","admin.settings.businessProfile.businessHours":"Horario","admin.settings.businessProfile.businessHoursPlaceholder":"Ej. Lunes a sábado, 09h00–18h00","admin.settings.businessProfile.websiteUrl":"Sitio web","admin.settings.businessProfile.instagramUrl":"Instagram","admin.settings.businessProfile.tiktokUrl":"TikTok","admin.settings.businessProfile.facebookUrl":"Facebook","admin.settings.businessProfile.linkedinUrl":"LinkedIn","admin.settings.businessProfile.quoteDisclaimer":"Texto legal o aclaración","admin.settings.businessProfile.quoteDisclaimerHint":"Aparece en la confirmación del pedido y puede usarse en plantillas de WhatsApp.","admin.settings.businessProfile.quoteDisclaimerPlaceholder":"Los precios son referenciales y están sujetos a confirmación final por WhatsApp.","admin.settings.businessProfile.previewLogoAlt":"Logo del negocio","admin.settings.businessProfile.previewNoContact":"Aún no has agregado información de contacto.","admin.nav.profile":"Mi perfil","admin.profile.title":"Mi perfil","admin.profile.subtitle":"Tu información personal dentro del admin. El correo lo administra Cognito y es de sólo lectura.","admin.profile.save":"Guardar cambios","admin.profile.saving":"Guardando…","admin.profile.saved":"Perfil actualizado","admin.profile.saveFailed":"No se pudo guardar el perfil. Inténtalo de nuevo.","admin.profile.loadFailed":"No se pudo cargar tu perfil.","admin.profile.summary":"Resumen","admin.profile.editCard":"Tus datos","admin.profile.membershipCard":"Membresía y rol","admin.profile.actionsCard":"Cuenta","admin.profile.displayName":"Nombre para mostrar","admin.profile.displayNameHint":"Aparece en notas internas, eventos del pedido y en el encabezado del admin.","admin.profile.email":"Correo","admin.profile.emailHint":"Lo administra Cognito · sólo lectura","admin.profile.phone":"Teléfono","admin.profile.avatarUrl":"URL de avatar","admin.profile.preferredLanguage":"Idioma preferido","admin.profile.preferredLanguageHint":"Idioma por defecto del admin para tu usuario. Si no eliges uno, usaremos el del negocio.","admin.profile.langInherit":"Heredar del negocio","admin.profile.currentRole":"Rol actual","admin.profile.currentTenant":"Negocio activo","admin.profile.authProvider":"Proveedor de inicio de sesión","admin.profile.allMemberships":"Tus membresías","admin.profile.switchTenant":"Cambiar negocio","admin.profile.copyPublicLink":"Copiar link público","admin.profile.linkCopied":"Link copiado","admin.profile.signOut":"Cerrar sesión","admin.profile.security":"Seguridad de la cuenta","admin.profile.securityHint":"Cambio de contraseña y MFA — disponible en próxima versión.","admin.profile.notifications":"Preferencias de notificaciones","admin.profile.notificationsHint":"Pronto podrás elegir qué eventos te llegan por correo.","admin.profile.comingSoon":"Próximamente","admin.profile.role.business_owner":"Dueño del negocio","admin.profile.role.tenant_admin":"Administrador","admin.profile.role.sales_rep":"Ventas","admin.profile.role.system_admin":"Administrador del sistema","admin.profile.tenantOpenLabel":"Abrir","admin.nav.whatsapp":"Mensajes de WhatsApp","admin.nav.billing":"Plan y facturación","admin.nav.statuses":"Estados","admin.settings.collapse.label":"Mostrar u ocultar configuración","admin.statuses.title":"Estados de cotización","admin.statuses.subtitle":"Personaliza etiquetas, colores, orden y plantillas de WhatsApp para tu pipeline.","admin.statuses.addCta":"Agregar estado","admin.statuses.column.label":"Etiqueta","admin.statuses.column.color":"Color","admin.statuses.column.order":"Orden","admin.statuses.column.irreversible":"Solo avance","admin.statuses.column.template":"Plantilla WhatsApp","admin.statuses.systemBadge":"Sistema","admin.statuses.deleteConfirm.title":"¿Eliminar este estado?","admin.statuses.deleteConfirm.body":"Este estado está en uso. Mueve las cotizaciones antes de eliminar.","admin.statuses.deleteConfirm.moveTo":"Mover cotizaciones a","admin.statuses.deleteConfirm.cta":"Eliminar estado","admin.statuses.deleteBlocked.systemStatus":"Los estados del sistema no se pueden eliminar.","admin.statuses.modal.create.title":"Nuevo estado","admin.statuses.modal.edit.title":"Editar estado","admin.statuses.modal.field.labelEn":"Etiqueta (inglés)","admin.statuses.modal.field.labelEs":"Etiqueta (español)","admin.statuses.modal.field.color":"Color","admin.statuses.modal.field.irreversible":"Solo avance (irreversible)","admin.statuses.modal.field.irreversibleHint":"Las cotizaciones en este estado no pueden retroceder en el pipeline.","admin.statuses.modal.field.template":"Plantilla WhatsApp","admin.statuses.modal.save":"Guardar","admin.statuses.modal.cancel":"Cancelar","admin.statuses.reorderHint":"Arrastra las filas para reordenar la secuencia.","admin.whatsappSettings.title":"Mensajes de WhatsApp","admin.whatsappSettings.subtitle":"Configura el número del negocio y las plantillas que se usan al recibir pedidos y dar seguimiento.","admin.whatsappSettings.save":"Guardar cambios","admin.whatsappSettings.saving":"Guardando…","admin.whatsappSettings.saved":"Cambios guardados","admin.whatsappSettings.saveFailed":"No se pudieron guardar los cambios. Inténtalo de nuevo.","admin.whatsappSettings.cardNumber":"Número de WhatsApp","admin.whatsappSettings.cardTemplates":"Plantillas por tipo de mensaje","admin.team.subtitle":"Tus compañeros del negocio y los roles que pueden tener. Las invitaciones llegan en una próxima versión.","admin.team.summary":"Resumen","admin.team.activeMembers":"Miembros activos","admin.team.pendingInvites":"Invitaciones pendientes","admin.team.membersHeading":"Miembros","admin.team.colName":"Nombre","admin.team.colEmail":"Correo","admin.team.colRole":"Rol","admin.team.colStatus":"Estado","admin.team.colLastActive":"Última actividad","admin.team.statusActive":"Activo","admin.team.statusInvited":"Invitación pendiente","admin.team.lastActiveYou":"Ahora mismo","admin.team.youSuffix":"(tú)","admin.team.rolesHeading":"Roles disponibles","admin.team.rolesIntro":"Estos son los roles que podrás asignar cuando habilitemos las invitaciones.","admin.team.role.business_owner.desc":"Acceso completo al negocio, incluyendo plan, facturación y miembros del equipo.","admin.team.role.tenant_admin.desc":"Configura branding, landing, catálogo, mensajes y gestiona pedidos.","admin.team.role.sales_rep.desc":"Atiende pedidos del día a día y da seguimiento por WhatsApp.","admin.team.inviteCta":"Invitar miembro","admin.team.inviteCtaSubtitle":"Disponible en la versión piloto","admin.team.inviteModalTitle":"Invitar a un nuevo miembro","admin.team.inviteModalBody":"Cuando habilitemos las invitaciones, podrás agregar miembros con un correo y un rol.","admin.team.inviteEmailLabel":"Correo del miembro","admin.team.inviteRoleLabel":"Rol","admin.team.inviteSubmit":"Enviar invitación","admin.team.inviteAvailableIn":"Disponible en la versión piloto","admin.team.close":"Cerrar","admin.billing.title":"Plan y facturación","admin.billing.subtitle":"Tu plan actual y las opciones para crecer cuando estés listo. En esta demo no procesamos pagos.","admin.billing.currentPlan":"Plan actual","admin.billing.planLabel":"Plan","admin.billing.statusActive":"Activo","admin.billing.billingMode":"Modo de facturación","admin.billing.billingModeManual":"Manual / demo","admin.billing.renewal":"Próxima renovación","admin.billing.renewalNone":"Sin configurar","admin.billing.usageHeading":"Uso","admin.billing.usage.products":"Productos activos","admin.billing.usage.quotes":"Pedidos este mes","admin.billing.usage.team":"Miembros del equipo","admin.billing.usage.landingEnabled":"Landing pública","admin.billing.usage.whatsappTemplates":"Plantillas de WhatsApp","admin.billing.usageYes":"Activada","admin.billing.usageNo":"Desactivada","admin.billing.usageOfLimit":"{used} de {limit}","admin.billing.planHeading":"Compara planes","admin.billing.planSubheading":"Hoy estás en Starter de demo. Cuando crezcas podemos pasar a Growth o Enterprise.","admin.billing.tier.starter":"Starter","admin.billing.tier.growth":"Growth","admin.billing.tier.enterprise":"Enterprise","admin.billing.tier.starter.body1":"Página pública con tu marca","admin.billing.tier.starter.body2":"Catálogo de productos y servicios","admin.billing.tier.starter.body3":"Pedidos multi-ítem","admin.billing.tier.starter.body4":"Entrega por WhatsApp","admin.billing.tier.growth.body1":"Más productos y miembros del equipo","admin.billing.tier.growth.body2":"Plantillas de seguimiento avanzadas","admin.billing.tier.growth.body3":"Analítica de ventas","admin.billing.tier.growth.body4":"Embudo y métricas por canal","admin.billing.tier.enterprise.body1":"Dominio personalizado","admin.billing.tier.enterprise.body2":"SSO / SAML y SCIM","admin.billing.tier.enterprise.body3":"API e integraciones","admin.billing.tier.enterprise.body4":"Soporte dedicado","admin.billing.upgrade":"Mejorar plan","admin.billing.contactUs":"Hablar con nosotros","admin.billing.currentBadge":"Plan actual","admin.billing.comingSoonBadge":"Pronto","admin.billing.sim.notSelected":"Sin plan seleccionado","admin.billing.sim.pendingActivation":"Pendiente de activación","admin.billing.sim.demoActive":"Demo activo","admin.billing.sim.inactive":"Inactivo","admin.billing.sim.suspended":"Suspendido","admin.billing.simStatusLabel":"Estado de la suscripción","admin.billing.publicSiteLabel":"Sitio público","admin.billing.publicSiteActive":"Visible para clientes","admin.billing.publicSiteInactive":"Aún no visible","admin.billing.publicSiteSuspended":"Suspendido","admin.billing.activateCta":"Activar plan piloto","admin.billing.activatingCta":"Activando…","admin.billing.deactivateCta":"Desactivar (volver a borrador)","admin.billing.activatedToast":"¡Listo! Tu sitio público está activo.","admin.billing.deactivatedToast":"Tu sitio volvió a estar oculto.","admin.billing.futureBillingNote":"El cobro real con tarjetas llegará en una versión posterior. Por ahora, todos los planes son demos sin cargo.","admin.billing.recommendedBadge":"Recomendado","admin.billing.monthly":"/ mes","admin.billing.free":"Gratis","admin.billing.planTagline.starter":"Para empezar a recibir pedidos por WhatsApp.","admin.billing.planTagline.growth":"Para escalar tu catálogo y tu equipo.","admin.billing.planTagline.pro":"Para marcas establecidas con varios equipos.","admin.billing.activeBadge":"Activo","admin.dashboard.banner.inactiveTitle":"Tu sitio público todavía no está activo","admin.dashboard.banner.inactiveBody":"Activá el plan demo (sin cargo) para que tus clientes puedan ver tu catálogo y enviarte pedidos.","admin.dashboard.banner.inactiveCta":"Activar plan demo","admin.dashboard.banner.previewCta":"Ver como cliente","admin.settings.businessProfile.cardLifecycle":"Sitio público","admin.settings.businessProfile.slugCopy":"Copiar subdominio","admin.settings.businessProfile.slugCopied":"¡Copiado!","admin.settings.businessProfile.slugLockNote":"Después de crear el negocio, el subdominio queda fijo para que los enlaces que compartas con tus clientes sigan funcionando.","admin.settings.businessProfile.domainFutureNote":"Cambio de subdominio y dominio propio (ej. tunegocio.com) llegan en una versión posterior.","admin.settings.businessProfile.manageBilling":"Administrar suscripción","admin.shell.openMenu":"Abrir menú","admin.shell.closeMenu":"Cerrar menú","admin.shell.mobileBuilderNotice":"Para edición avanzada del producto, recomendamos usar una pantalla más grande.","admin.catalog.emptyTitle":"Aún no tienes productos publicados","admin.catalog.emptyBody":"Crea tu primer producto para empezar a recibir pedidos desde tu página pública.","admin.catalog.emptyPrimary":"Crear producto","admin.catalog.emptySecondary":"Usar plantilla","admin.quotes.emptyTitle":"Todavía no has recibido pedidos","admin.quotes.emptyBody":"Comparte tu página pública para que tus clientes puedan pedir productos o servicios.","admin.quotes.emptyPrimary":"Copiar link público","admin.quotes.emptySecondary":"Ver página pública","admin.quotes.emptyFilteredTitle":"Sin resultados con estos filtros","admin.quotes.emptyFilteredBody":"Ajusta los filtros o quítalos para ver todos los pedidos de nuevo.","admin.dashboard.noQuotesTitle":"Aún no hay pedidos recientes","admin.dashboard.noQuotesBody":"Comparte tu página pública con tus clientes para recibir el primer pedido."},ty={"common.loading":"Loading…","common.back":"← Back","common.notFound":"Not found.","common.yes":"Yes","common.no":"No","common.cancel":"Cancel","notFound.intro":"This is a tenant-specific order portal. Open a tenant link to request an order, for example:","gated.title":"This site is not active yet","gated.body.subscriptionRequired":"The business hasn't activated their public site yet. Check back soon, or message them on WhatsApp.","gated.body.setupIncomplete":"The business is still setting up their catalog. Check back in a few days.","gated.body.suspended":"This public site is temporarily suspended. If you think this is a mistake, message them on WhatsApp.","gated.body.default":"This public site is not active yet.","gated.contactWhatsapp":"Message on WhatsApp","landing.heading":"Our offerings","landing.empty":"No items are available yet.","landing.from":"From {price}","landing.customizeCta":"Customize & order","landing.viewCatalog":"View catalog","landing.viewAll":"View full catalog","landing.talkWhatsapp":"Chat on WhatsApp","landing.contact":"Contact","landing.hours":"Hours","landing.homeLink":"Go to store home","catalog.title":"Catalog","catalog.allCategories":"All","catalog.featured":"Featured","catalog.gridView":"Grid","catalog.listView":"List","catalog.status.available":"Available","catalog.status.under_request":"Under request","catalog.status.custom_made":"Custom made","catalog.status.limited":"Limited availability","detail.benefits":"Benefits","detail.included":"What's included","detail.notIncluded":"Not included","detail.deliveryTime":"Delivery time","detail.details":"Details","detail.faq":"FAQ","detail.related":"You might also like","cart.title":"Your order","cart.empty":"Your order is empty.","cart.addToCart":"Add to order","cart.update":"Update item","cart.added":"Added to your order","cart.continueBrowsing":"Keep browsing","cart.viewCart":"View order","cart.remove":"Remove","cart.edit":"Edit","cart.quantity":"Quantity","cart.subtotal":"Subtotal","cart.total":"Total","cart.notes":"Comments","cart.notesPlaceholder":"Anything we should know?","cart.generate":"Generate order","cart.generating":"Generating…","builder.yourDetails":"Your details","builder.name":"Name","builder.phone":"Phone","builder.email":"Email","builder.request":"Request order","builder.requesting":"Submitting…","builder.requiredError":"Name and phone are required.","builder.submitFailed":"Failed to submit order.","price.discount":"Discount","price.tax":"Tax","price.total":"Total","confirm.title":"Order received!","confirm.summary":"Reference {number} · Total {total}","confirm.openWhatsapp":"Open WhatsApp","confirm.copy":"Copy message","confirm.copied":"Copied!","language.label":"Language","admin.nav.dashboard":"Dashboard","admin.nav.catalog":"Catalog","admin.nav.quotes":"Orders","admin.nav.landing":"Public page","admin.nav.branding":"Branding","admin.nav.team":"Team","admin.shell.noTenant":"No tenant","admin.shell.signOut":"Sign out","admin.login.subtitle":"Tenant administration","admin.login.google":"Sign in with Google","admin.login.dev":"Dev sign in (local)","admin.login.callbackSigningIn":"Signing you in…","admin.login.missingCode":"Missing authorization code.","admin.login.signInFailed":"Sign-in failed.","admin.login.loadAccountFailed":"Failed to load account.","admin.auth.brand":"Vendrae","admin.auth.tagline":"Orders on autopilot for your business.","admin.auth.emailLabel":"Email","admin.auth.passwordLabel":"Password","admin.auth.nameLabel":"Your name","admin.auth.namePlaceholder":"Ana Pérez","admin.auth.emailPlaceholder":"you@company.com","admin.auth.passwordPlaceholder":"At least 6 characters","admin.auth.signIn":"Sign in","admin.auth.signingIn":"Signing in…","admin.auth.signUp":"Create account","admin.auth.signingUp":"Creating account…","admin.auth.orContinueWith":"or continue with","admin.auth.continueWithGoogle":"Continue with Google","admin.auth.googleDisabledTooltip":"Google sign-in will be enabled in deployed environments.","admin.auth.noAccount":"Don't have an account?","admin.auth.createOne":"Create one","admin.auth.haveAccount":"Already have an account?","admin.auth.signInHere":"Sign in","admin.auth.forgot":"Forgot your password?","admin.auth.devAffordance":"Development shortcut","admin.auth.devSignInQuick":"Sign in as Demo Owner","admin.auth.signupTitle":"Create your account","admin.auth.signupSubtitle":"Start collecting orders in minutes.","admin.auth.loginTitle":"Welcome back","admin.auth.loginSubtitle":"Sign in to manage your business.","admin.auth.forgotTitle":"Recover access","admin.auth.forgotBody":"Email-based password reset will be enabled once real auth is deployed. For now, contact us to recover your account.","admin.auth.backToLogin":"Back to sign in","admin.auth.invalidEmail":"Enter a valid email.","admin.auth.passwordTooShort":"Password must be at least 6 characters.","admin.auth.devModeBadge":"Dev mode","admin.createBusiness.title":"Create your business","admin.createBusiness.subtitle":"Set the basics. You can edit everything later; the subdomain is permanent.","admin.createBusiness.nameLabel":"Business name","admin.createBusiness.namePlaceholder":"Quito Photo Studio","admin.createBusiness.industryLabel":"Industry","admin.createBusiness.industryPlaceholder":"Choose one…","admin.createBusiness.industrySelectPresetHint":"This industry will pre-pick your starter template in the next step.","admin.createBusiness.slugLabel":"Public subdomain","admin.createBusiness.slugHelp":"Lowercase letters, numbers and hyphens only. 3–40 characters.","admin.createBusiness.slugChecking":"Checking…","admin.createBusiness.slugAvailable":"Available","admin.createBusiness.slugReason.invalid":"Invalid format.","admin.createBusiness.slugReason.reserved":"This subdomain is reserved.","admin.createBusiness.slugReason.taken":"Already in use.","admin.createBusiness.previewDev":"In dev:","admin.createBusiness.previewProd":"In production:","admin.createBusiness.descriptionLabel":"Short description (optional)","admin.createBusiness.descriptionPlaceholder":"e.g. Studio specialized in product photography and professional portraits.","admin.createBusiness.whatsappLabel":"WhatsApp (optional)","admin.createBusiness.whatsappHelp":"Digits only with country code. e.g. 593990435366","admin.createBusiness.contactEmailLabel":"Contact email (optional)","admin.createBusiness.create":"Create business","admin.createBusiness.creating":"Creating…","admin.createBusiness.slugLockNotice":"After creation, the subdomain can't be changed (keeps shared links stable).","admin.createBusiness.requiredField":"This field is required.","admin.createBusiness.fixSlugFirst":"Fix the subdomain before continuing.","admin.tenant.selectHeading":"Select a business","admin.guard.noMemberships":"Your account has no tenant memberships yet.","admin.dashboard.activeItems":"Active products","admin.dashboard.submittedQuotes":"Submitted orders","admin.dashboard.publicPage":"Public order page","admin.dashboard.recentQuotes":"Recent orders","admin.dashboard.noQuotes":"No orders yet.","admin.dashboard.subtitle":"Here's a snapshot of your recent activity.","admin.dashboard.openPublic":"Open public page","admin.dashboard.copyLink":"Copy link","admin.dashboard.linkCopied":"Copied!","admin.dashboard.quotesToday":"Orders today","admin.dashboard.quotesThisWeek":"This week","admin.dashboard.quotesPending":"Pending","admin.dashboard.quotesAccepted":"Accepted","admin.dashboard.potentialValue":"Potential value","admin.dashboard.mostQuoted":"Most ordered product","admin.dashboard.mostQuotedEmpty":"No orders yet.","admin.dashboard.timesQuoted":"{n} order(s)","admin.dashboard.viewAll":"View all","admin.dashboard.quickActions":"Quick actions","admin.dashboard.actionNewProduct":"New product","admin.dashboard.actionEditLanding":"Edit public page","admin.dashboard.actionEditBranding":"Edit branding","admin.dashboard.actionViewQuotes":"View orders","admin.dashboard.needsAttention":"Products to review","admin.dashboard.allGood":"Everything's in shape.","admin.dashboard.fix":"Fix","admin.dashboard.reason.no_cover":"Missing cover image","admin.dashboard.reason.not_published":"Not published","admin.dashboard.reason.no_detail":"Missing detail content","admin.dashboard.reason.inactive":"Inactive","admin.dashboard.setup":"Setup checklist","admin.dashboard.do":"Do","admin.dashboard.checklist.branding":"Upload a logo or favicon","admin.dashboard.checklist.whatsapp":"Set up your WhatsApp number","admin.dashboard.checklist.firstProduct":"Publish your first product","admin.dashboard.checklist.landing":"Enable and publish the public landing","admin.dashboard.checklist.testQuote":"Receive your first order","admin.dashboard.continueSetup":"Continue setup","admin.onboarding.title":"Welcome, {name}","admin.onboarding.subtitle":"Let's get your business online in a few short steps. You can pause and come back anytime.","admin.onboarding.back":"Back","admin.onboarding.skip":"Skip this step","admin.onboarding.saving":"Saving…","admin.onboarding.publish":"Save & publish","admin.onboarding.continue":"Continue","admin.onboarding.saveAndContinue":"Save & continue","admin.onboarding.saveFailed":"Couldn't save.","admin.onboarding.step.welcome":"Welcome","admin.onboarding.step.industry":"Your industry","admin.onboarding.step.branding":"Branding","admin.onboarding.step.whatsapp":"WhatsApp","admin.onboarding.step.product":"First product","admin.onboarding.step.landing":"Public page","admin.onboarding.step.done":"Done","admin.onboarding.industry.title":"What does your business do?","admin.onboarding.industry.hint":"Pick one to tune colors, messages and templates. Everything can be customized later.","admin.onboarding.industry.name.3d_printing":"3D printing","admin.onboarding.industry.name.wedding_photography":"Wedding photography","admin.onboarding.industry.name.catering":"Catering & food","admin.onboarding.industry.name.custom_gifts":"Custom gifts","admin.onboarding.industry.name.beauty":"Beauty & wellness","admin.onboarding.industry.name.home_services":"Home services","admin.onboarding.industry.name.b2b":"B2B / Professional","admin.onboarding.industry.name.printing":"Printing & stationery","admin.onboarding.industry.name.event_decoration":"Event decoration","admin.onboarding.industry.tagline.3d_printing":"Custom objects, on-demand printing.","admin.onboarding.industry.tagline.wedding_photography":"Packages for your special day.","admin.onboarding.industry.tagline.catering":"Menus, events and banquet services.","admin.onboarding.industry.tagline.custom_gifts":"Unique details for every occasion.","admin.onboarding.industry.tagline.beauty":"Services and treatments.","admin.onboarding.industry.tagline.home_services":"Plumbing, electric, cleaning and more.","admin.onboarding.industry.tagline.b2b":"Consulting and corporate solutions.","admin.onboarding.industry.tagline.printing":"Printing, branding and graphics.","admin.onboarding.industry.tagline.event_decoration":"Weddings, birthdays, corporate.","admin.onboarding.product.template.title":"Choose a template","admin.onboarding.product.template.hint":"Start with example fields for your industry. You can edit them later in the catalog editor.","admin.onboarding.product.template.name.custom_physical":"Customizable physical product","admin.onboarding.product.template.name.service_package":"Service package","admin.onboarding.product.template.name.add_on_service":"Service with add-ons","admin.onboarding.product.template.name.quantity_measurement":"Quantity / measurement","admin.onboarding.product.template.name.premium_package":"Premium package","admin.onboarding.product.template.name.event_service":"Event service","admin.onboarding.product.template.name.personalized_gift":"Personalized gift","admin.onboarding.product.template.desc.custom_physical":"Color, size and notes.","admin.onboarding.product.template.desc.service_package":"Basic / Standard / Premium.","admin.onboarding.product.template.desc.add_on_service":"Base service with optional add-ons.","admin.onboarding.product.template.desc.quantity_measurement":"Per-unit or per-measure price.","admin.onboarding.product.template.desc.premium_package":"Main package with extras.","admin.onboarding.product.template.desc.event_service":"Per guest count + options.","admin.onboarding.product.template.desc.personalized_gift":"Inscription text + optional wrap.","admin.urlImage.emptyHint":"Paste an image URL to preview it here.","admin.urlImage.invalidUrl":"That URL doesn't look valid.","admin.urlImage.failedToLoad":"We couldn't load that image — check the URL.","admin.urlImage.clear":"Clear","admin.imageUpload.emptyHint":"Drop an image here or choose a file.","admin.imageUpload.dropHint":"Drop to upload","admin.imageUpload.uploading":"Uploading…","admin.imageUpload.uploadFailed":"Upload failed — try again.","admin.imageUpload.remove":"Remove","admin.imageUpload.chooseFile":"Choose file","admin.imageUpload.useUrlInstead":"Use URL instead","admin.imageUpload.useUploadInstead":"Upload a file instead","admin.imageUpload.fileTooLarge":"File is too large.","admin.imageUpload.invalidType":"Unsupported file type.","admin.imageUpload.acceptedTypes":"JPEG, PNG, or WebP","admin.imageUpload.addToGallery":"Add to gallery","seo.catalog.description":"Browse {name}'s customizable products and place your order in seconds over WhatsApp.","share.copy":"Copy link","share.copied":"Copied!","share.share":"Share","admin.onboarding.welcome.title":"Your business is almost ready","admin.onboarding.welcome.body":"Let's review the content we generated for your industry. You can edit or replace anything you see.","admin.onboarding.welcome.bullet1":"Branding: logo, colors and visual style.","admin.onboarding.welcome.bullet2":"WhatsApp: the number where orders will arrive.","admin.onboarding.welcome.bullet3":"Your first product or service.","admin.onboarding.welcome.bullet4":"Your public page: the landing your customers will see.","admin.onboarding.welcome.start":"Get started","admin.onboarding.welcome.useDemoData":"Use demo data","admin.onboarding.branding.title":"Brand & style","admin.onboarding.branding.hint":"These colors and style flow into your public page. You can tweak them later.","admin.onboarding.whatsapp.title":"WhatsApp number","admin.onboarding.whatsapp.hint":"It's where orders will arrive. Digits only, including country code.","admin.onboarding.whatsapp.templateNote":"The messages themselves are edited later under Branding → WhatsApp messages.","admin.onboarding.product.title":"Your first product","admin.onboarding.product.hint":"Create a simple one now; you can add full customization later from the catalog.","admin.onboarding.product.name":"Product name","admin.onboarding.product.namePlaceholder":"e.g. Custom box","admin.onboarding.product.slugPlaceholder":"auto from name","admin.onboarding.product.basePrice":"Base price (USD)","admin.onboarding.product.nameRequired":"Name is required.","admin.onboarding.product.create":"Create product","admin.onboarding.product.created":"Product created.","admin.onboarding.landing.title":"Your public page","admin.onboarding.landing.hint":"This is the landing customers will see when they open your link. Edit the title and subtitle.","admin.onboarding.landing.publishNote":"When you publish, your page is online immediately. You can keep editing from Public page.","admin.onboarding.done.title":"You're all set!","admin.onboarding.done.body":"Your portal is live. Share the link with your customers or open it to preview as them.","admin.onboarding.done.publicUrlLabel":"Your public link","admin.onboarding.done.previewAsCustomer":"Preview as customer","admin.onboarding.done.openProduct":"Open product","admin.onboarding.done.openDashboard":"Go to dashboard","admin.onboarding.done.editCatalog":"Edit catalog","admin.onboarding.step.catalog":"Products","admin.onboarding.welcome.recap.heading":"Here's what we generated for your business:","admin.onboarding.welcome.recap.catalogCount":"{n} starter products","admin.onboarding.welcome.recap.branding":"Branding with colors and style for your industry","admin.onboarding.welcome.recap.landing":"Public landing page draft (ready to review)","admin.onboarding.welcome.recap.whatsapp":"WhatsApp template preconfigured","admin.onboarding.welcome.recap.empty":"You didn't pick an industry when creating the business, so the next steps start blank. You can fill them in manually.","admin.onboarding.catalog.title":"Review your products","admin.onboarding.catalog.hint":"Products generated as drafts. We prepared starter products for your industry. Review, edit and publish when ready — drafts stay hidden from your public store until published.","admin.onboarding.catalog.draftNote":"Each product starts as a draft—review pricing, descriptions, and options before publishing.","admin.onboarding.catalog.empty":"Your catalog is empty.","admin.onboarding.catalog.emptyCta":"Create a product","admin.onboarding.catalog.publish":"Publish","admin.onboarding.catalog.unpublish":"Hide","admin.onboarding.catalog.published":"Published","admin.onboarding.catalog.draft":"Draft","admin.onboarding.catalog.hidden":"Hidden","admin.onboarding.catalog.edit":"Edit","admin.onboarding.catalog.publishAll":"Publish all","admin.onboarding.catalog.basePrice":"Base price","admin.onboarding.summary.heading":"Final summary","admin.onboarding.summary.businessName":"Business","admin.onboarding.summary.publicUrl":"Public URL","admin.onboarding.summary.itemCount":"{n} product(s) in your catalog","admin.onboarding.summary.brandingApplied":"Branding applied","admin.onboarding.summary.whatsappApplied":"WhatsApp templates configured","admin.onboarding.summary.landingDraft":"Public landing in draft","admin.onboarding.summary.landingPublished":"Public landing published","admin.onboarding.activate.heading":"Ready to activate your site?","admin.onboarding.activate.body":"Activate the demo plan (no charge) to make your public site visible to your customers.","admin.onboarding.activate.cta":"Activate demo plan","admin.onboarding.activate.continueWithout":"Continue without activating","admin.onboarding.activate.note":"Real billing will arrive in a later release.","admin.catalog.title":"Catalog","admin.catalog.newItem":"New item","admin.catalog.empty":"No items yet.","admin.catalog.colName":"Name","admin.catalog.colType":"Type","admin.catalog.colBasePrice":"Base price","admin.catalog.colActive":"Active","admin.catalog.colCategory":"Category","admin.catalog.colStatus":"Status","admin.catalog.featured":"Featured","admin.catalog.storefront":"Storefront","admin.catalog.moveUp":"Move up","admin.catalog.moveDown":"Move down","admin.catalog.edit":"Edit","admin.catalog.deleteAria":"Delete product","admin.catalog.deleteConfirm.title":"Delete product","admin.catalog.deleteConfirm.body":"This product will no longer appear in your catalog, but historical orders will be preserved.","admin.catalog.deleteConfirm.cta":"Delete","admin.catalog.showDeleted":"Show deleted","admin.catalog.deletedBadge":"Deleted","admin.catalog.restore":"Restore","admin.merch.title":"Storefront listing","admin.merch.category":"Category","admin.merch.badge":"Badge","admin.merch.coverImageUrl":"Cover image URL","admin.merch.shortDescription":"Short description","admin.merch.status":"Availability","admin.merch.featured":"Feature in storefront","admin.merch.displayOrder":"Order","admin.itemType.product":"Product","admin.itemType.service":"Service","admin.itemType.package":"Package","admin.editor.newItem":"New item","admin.editor.editItem":"Edit item","admin.editor.untitledItem":"Untitled item","admin.editor.statusNew":"New","admin.editor.statusPublished":"Published","admin.editor.statusPublishedChanges":"Published · unpublished changes","admin.editor.statusDraft":"Draft (not public)","admin.editor.design":"Design","admin.editor.preview":"Preview","admin.editor.saveDraft":"Save draft","admin.editor.saving":"Saving…","admin.editor.unpublish":"Unpublish","admin.editor.publish":"Publish","admin.editor.draftSaved":"Draft saved.","admin.editor.saveFailed":"Save failed.","admin.editor.publishSaveFirst":"Save the draft first, then publish.","admin.editor.fixIssues":"Fix the configuration issues before publishing.","admin.editor.published":"Published — your customers see these changes now.","admin.editor.publishFailed":"Publish failed.","admin.editor.unpublished":"Unpublished — hidden from the public page.","admin.editor.failed":"Failed.","admin.editor.configIssues":"Configuration issues:","admin.editor.previewContactNote":"Customers enter their contact details here.","admin.editor.previewUnavailable":"Preview unavailable — check advanced pricing rules JSON.","admin.editor.selectElement":"Select an element on the canvas to edit it.","admin.editor.pageSettingsGlance":"Page settings — title, image, pricing, message","admin.editor.canvasEmpty":"Design your order page. Add a section like “Personalization” or “Delivery”, then add the fields customers will fill in.","admin.editor.addSection":"Add section","admin.editor.addField":"Add field","admin.editor.sectionFallback":"Section {n}","admin.editor.noFields":"No fields yet.","admin.editor.informationBlock":"Information block","admin.editor.untitledField":"Untitled field","admin.editor.moveSectionUp":"Move section up","admin.editor.moveSectionDown":"Move section down","admin.editor.removeSection":"Remove section","admin.editor.moveFieldUp":"Move field up","admin.editor.moveFieldDown":"Move field down","admin.editor.removeField":"Remove field","admin.editor.glanceOption":"Option","admin.editor.glanceNoOptions":"No options yet","admin.editor.glanceToggle":"Toggle · {label}","admin.editor.glanceNumber":"Number","admin.editor.glanceTextInput":"Text input","admin.editor.glanceFileUpload":"File upload (coming soon)","admin.editor.pageSettings":"Page settings","admin.editor.tabBasics":"Basics","admin.editor.tabVisual":"Visual","admin.editor.tabPricing":"Pricing","admin.editor.tabMessage":"Message","admin.editor.fieldName":"Name","admin.editor.fieldNameHint":"Shown to customers as the title.","admin.editor.publicSlug":"Public slug","admin.editor.publicSlugHint":"Order page URL. lowercase-with-hyphens.","admin.editor.type":"Type","admin.editor.basePrice":"Base price","admin.editor.basePriceHint":"Starting price before customizations.","admin.editor.currency":"Currency","admin.editor.shortDescription":"Short description","admin.editor.defaultImageUrl":"Default image URL","admin.editor.badge":"Badge","admin.editor.badgeHint":'e.g. "Most requested", "New".',"admin.editor.displayTitle":"Display title","admin.editor.displayTitleHint":"Overrides the name (optional).","admin.editor.displaySubtitle":"Display subtitle","admin.editor.customerInstructions":"Customer instructions","admin.editor.galleryUrls":"Gallery URLs","admin.editor.galleryUrlsHint":"One per line.","admin.editor.pricingNote":"Most pricing lives on each field (option price adjustments, toggle price, per-unit / tiered quantity pricing). Use the advanced rules only for conditional discounts.","admin.editor.advancedPricing":"Advanced pricing rules (JSON)","admin.editor.advancedPricingHint":"Leave as [] unless needed.","admin.editor.messageNote":"The WhatsApp order message. The destination number is set in Branding settings.","admin.editor.messageIntro":"Message intro","admin.editor.messageOutro":"Message outro","admin.editor.showBreakdown":"Show full price breakdown (else only total)","admin.editor.labelsOnly":"Use customer-facing labels only","admin.editor.section":"Section","admin.editor.title":"Title","admin.editor.description":"Description","admin.editor.sectionDescHint":"Optional helper text under the section title.","admin.editor.field":"Field","admin.editor.fieldType":"Field type","admin.editor.informationText":"Information text","admin.editor.informationTextHint":"Shown to the customer; never affects price.","admin.editor.label":"Label","admin.editor.key":"Key","admin.editor.keyHint":"Internal id (auto from label if blank).","admin.editor.placeholder":"Placeholder","admin.editor.required":"Required","admin.editor.yesLabel":"“Yes” label","admin.editor.priceWhenEnabled":"Price when enabled","admin.editor.imageWhenEnabled":"Image when enabled (URL)","admin.editor.min":"Min","admin.editor.max":"Max","admin.editor.step":"Step","admin.editor.unitLabel":"Unit label","admin.editor.unitLabelHint":'e.g. "units", "hours".',"admin.editor.pricingMode":"Pricing mode","admin.editor.pricingNone":"No price impact","admin.editor.pricingPerUnit":"Fixed price per unit","admin.editor.pricingTiered":"Tiered price","admin.editor.pricePerUnit":"Price per unit","admin.editor.tiers":"Tiers","admin.editor.minQtyPlaceholder":"min qty","admin.editor.unitPricePlaceholder":"unit price","admin.editor.removeTier":"Remove tier","admin.editor.addTier":"Add tier","admin.editor.options":"Options","admin.editor.labelPlaceholder":"label","admin.editor.removeOption":"Remove option","admin.editor.priceAdjPlaceholder":"± price","admin.editor.imageUrlPlaceholder":"image URL","admin.editor.addOption":"Add option","admin.editor.minSelections":"Min selections","admin.editor.maxSelections":"Max selections","admin.editor.conditionToggle":"Only show when another field equals a value","admin.editor.conditionFieldPlaceholder":"— field —","admin.editor.conditionEqualsPlaceholder":"equals (true / option key)","admin.editor.conditionAddFieldFirst":"Add another field first.","admin.editor.previewDesktop":"Desktop","admin.editor.previewMobile":"Mobile","admin.editor.validationCount":"{n} thing(s) to fix","admin.editor.addFieldTitle":"Add a field","admin.editor.chooseFieldType":"Choose the type of field to add.","admin.editor.duplicateSection":"Duplicate section","admin.editor.duplicateField":"Duplicate field","admin.editor.moveFieldToSection":"Move to section","admin.editor.affectsMessage":"Include this answer in the WhatsApp message","admin.editor.addItem":"Add","admin.editor.removeItem":"Remove","admin.editor.badgePrice":"Affects price","admin.editor.badgeImage":"Changes image","admin.editor.badgeMessage":"In message","admin.editor.badgeConditional":"Conditional","admin.editor.badgeRequired":"Required","admin.editor.tabDetail":"Detail","admin.editor.detailNote":"Content for the product detail page (shown before ordering).","admin.editor.benefits":"Benefits","admin.editor.benefitsHint":"Key selling points.","admin.editor.included":"What's included","admin.editor.notIncluded":"Not included","admin.editor.deliveryTime":"Delivery time","admin.editor.deliveryTimeHint":'e.g. "3–5 business days".',"admin.editor.detailsText":"Materials & details","admin.editor.detailsTextHint":"Materials, finish, or service details.","admin.editor.faqs":"FAQ","admin.editor.faqQuestion":"Question","admin.editor.faqAnswer":"Answer","admin.editor.addFaq":"Add question","admin.editor.removeFaq":"Remove question","admin.fieldType.single_choice":"Single choice","admin.fieldType.multiple_choice":"Multiple choice","admin.fieldType.boolean":"Yes / No toggle","admin.fieldType.quantity":"Quantity","admin.fieldType.number":"Number","admin.fieldType.text":"Short text","admin.fieldType.textarea":"Long text","admin.fieldType.file_upload":"File upload","admin.fieldType.info":"Information block","admin.fieldHint.single_choice":"Customer picks one option (e.g. color, size, delivery zone).","admin.fieldHint.multiple_choice":"Customer picks several options (e.g. add-ons, accessories).","admin.fieldHint.boolean":"A simple yes/no add-on (e.g. gift wrapping).","admin.fieldHint.quantity":"A numeric amount, optionally priced per unit or by tier.","admin.fieldHint.number":"A free numeric value (e.g. width, attendees).","admin.fieldHint.text":"A short text entry (e.g. name to engrave).","admin.fieldHint.textarea":"Longer instructions or notes.","admin.fieldHint.file_upload":"Upload a logo or reference image (coming soon).","admin.fieldHint.info":"A read-only note shown to the customer; never affects price.","admin.landing.title":"Public page","admin.landing.openPublic":"View public page","admin.landing.saveDraft":"Save draft","admin.landing.saving":"Saving…","admin.landing.publish":"Publish","admin.landing.draftSaved":"Draft saved.","admin.landing.saveFailed":"Couldn't save.","admin.landing.published":"Page published.","admin.landing.publishFailed":"Couldn't publish.","admin.landing.statusPublished":"Published","admin.landing.statusPublishedChanges":"Unpublished changes","admin.landing.statusNeverPublished":"Not published","admin.landing.disabledHint":"The public landing is disabled. Visitors will see the plain catalog list.","admin.landing.sectionVisible":"Show this section","admin.landing.heading":"Heading","admin.landing.subheading":"Subheading","admin.landing.tabGeneral":"General","admin.landing.tabHero":"Hero","admin.landing.tabFeatured":"Featured","admin.landing.tabHow":"How it works","admin.landing.tabBenefits":"Benefits","admin.landing.tabTestimonials":"Testimonials","admin.landing.tabFaq":"FAQ","admin.landing.tabContact":"Contact","admin.landing.generalHint":"Enable the public landing to show the hero + sections; disabled falls back to a plain catalog list.","admin.landing.enabledLabel":"Enable public landing page","admin.landing.heroTitle":"Headline","admin.landing.heroSubtitle":"Subheadline","admin.landing.heroDescription":"Description","admin.landing.heroTextColors.title":"Hero text colors","admin.landing.heroTextColors.mode.auto":"Automatic (default)","admin.landing.heroTextColors.mode.single":"Single color for all text","admin.landing.heroTextColors.mode.custom":"Custom color per field","admin.landing.heroTextColors.singleColor":"Text color","admin.landing.heroTextColors.titleColor":"Title color","admin.landing.heroTextColors.subtitleColor":"Subtitle color","admin.landing.heroTextColors.descriptionColor":"Description color","admin.landing.heroTextColors.movedHint":"Hero text colors are now edited from the Branding page.","admin.branding.heroTextColorsCardTitle":"Hero text colors","admin.landing.heroImageUrl":"Hero image URL","admin.landing.heroImageHint":"Large image shown next to the headline. Leave empty for a solid color hero.","admin.landing.heroPrimaryCtaLabel":"Primary button","admin.landing.heroPrimaryCtaTarget":"Primary button target","admin.landing.heroSecondaryCtaLabel":"Secondary button","admin.landing.heroSecondaryCtaTarget":"Secondary button target","admin.landing.ctaTarget.catalog":"Catalog","admin.landing.ctaTarget.whatsapp":"WhatsApp","admin.landing.featuredMode":"Selection mode","admin.landing.featuredModeAuto":"Automatic (most recent)","admin.landing.featuredModeManual":"Manual (pick products)","admin.landing.featuredLimit":"How many to show","admin.landing.featuredItemSlugs":"Product slugs","admin.landing.featuredItemSlugsHint":"One per line (the 'slug' that appears in the product URL).","admin.landing.steps":"Steps","admin.landing.addStep":"Add step","admin.landing.removeStep":"Remove step","admin.landing.stepTitle":"Step title","admin.landing.stepDescription":"Description","admin.landing.benefitsItems":"Benefits","admin.landing.addBenefit":"Add benefit","admin.landing.removeBenefit":"Remove benefit","admin.landing.benefitTitle":"Title","admin.landing.benefitDescription":"Description","admin.landing.benefitIcon.check":"Check","admin.landing.benefitIcon.sparkles":"Sparkles","admin.landing.benefitIcon.bolt":"Bolt","admin.landing.benefitIcon.receipt":"Receipt","admin.landing.benefitIcon.chat":"Chat","admin.landing.benefitIcon.shield":"Shield","admin.landing.benefitIcon.clock":"Clock","admin.landing.addTestimonial":"Add testimonial","admin.landing.removeTestimonial":"Remove testimonial","admin.landing.testimonialName":"Customer name","admin.landing.testimonialComment":"Comment","admin.landing.testimonialAvatarUrl":"Avatar URL (optional)","admin.landing.addFaq":"Add question","admin.landing.removeFaq":"Remove question","admin.landing.faqQuestion":"Question","admin.landing.faqAnswer":"Answer","admin.landing.footerTagline":"Tagline","admin.landing.footerBackgroundColor":"Background color","admin.landing.footerTextColor":"Text color","admin.landing.footerLogoMode":"Footer logo","admin.landing.footerLogoMode.business":"Use business logo","admin.landing.footerLogoMode.custom":"Upload footer logo","admin.landing.footerLogoMode.text":"Text only","admin.landing.footerCustomLogo":"Custom footer logo","admin.landing.footerShowContactInfo":"Show contact information","admin.landing.footerShowSocialLinks":"Show social links","admin.landing.footerWhatsapp":"WhatsApp","admin.landing.footerWhatsappHint":"Number with country code (e.g. 593990000000).","admin.landing.footerInstagram":"Instagram","admin.landing.footerEmail":"Email","admin.landing.footerAddress":"Address","admin.landing.footerHours":"Hours","admin.quotes.title":"Orders","admin.quotes.allStatuses":"All statuses","admin.quotes.empty":"No orders.","admin.quotes.emptyFiltered":"No orders match the filters.","admin.quotes.colNumber":"Number","admin.quotes.colCustomer":"Customer","admin.quotes.colContact":"Contact","admin.quotes.colTotal":"Total","admin.quotes.colStatus":"Status","admin.quotes.colCreated":"Created","admin.quotes.filterStatus":"Status","admin.quotes.filterProduct":"Product","admin.quotes.filterAllProducts":"All products","admin.quotes.filterFrom":"From","admin.quotes.filterTo":"To","admin.quotes.filterSearch":"Search customer","admin.quotes.filterSearchPlaceholder":"Name, email or phone…","admin.quotes.clearFilters":"Clear filters","admin.quotes.view.active":"Active","admin.quotes.view.archived":"Archived","admin.quotes.view.deleted":"Deleted","admin.quotes.view.all":"All","admin.manualQuote.title":"New order","admin.manualQuote.newButton":"New order","admin.manualQuote.cancel":"Cancel","admin.manualQuote.customerSection":"Customer","admin.manualQuote.customerName":"Customer name","admin.manualQuote.whatsapp":"WhatsApp","admin.manualQuote.phone":"Phone","admin.manualQuote.email":"Email","admin.manualQuote.internalNotes":"Internal notes","admin.manualQuote.validation.nameRequired":"Customer name is required.","admin.manualQuote.saveFailed":"Could not create the order.","admin.manualQuote.forbidden":"You do not have permission to create orders.","admin.quotes.archive":"Archive","admin.quotes.delete":"Delete","admin.quotes.restore":"Restore","admin.quotes.deleteConfirm.title":"Delete order","admin.quotes.deleteConfirm.body":"The order will be hidden from the list. You can find it in the Deleted tab. This does not affect historical records.","admin.quotes.deleteConfirm.cta":"Delete","admin.quotes.archiveConfirm.title":"Archive order","admin.quotes.archiveConfirm.body":"The order will move to Archived and no longer appear in the main list.","admin.quotes.colActions":"Actions","admin.quote.customer":"Customer","admin.quote.customerEdit":"Edit","admin.quote.customerEditTitle":"Edit customer details","admin.quote.customerEditSave":"Save","admin.quote.customerEditSaveFailed":"Could not update the customer details.","admin.quote.total":"Total","admin.quote.changeStatus":"Change status","admin.quote.noTransitions":"No further transitions allowed.","admin.quote.selectPlaceholder":"Select…","admin.quote.apply":"Apply","admin.quote.updating":"Updating…","admin.quote.updateFailed":"Update failed.","admin.quote.activity":"Activity","admin.activity.statusChangedFromTo":"Status changed from {from} to {to}","admin.activity.statusChangedTo":"Status changed to {to}","admin.activity.statusOverride":"Admin override: status changed from {from} to {to}","admin.activity.pedidoRevisionCreated":"New revision #{number} created","admin.activity.itemPriceOverridden":"Item price overridden","admin.activity.discountApplied":"Discount applied","admin.activity.chargeAdded":"Charge added","admin.activity.proposalSent":"Proposal sent to the customer","admin.activity.pedidoFinalized":"Pedido finalized","admin.activity.manualLineItemAdded":"Manual line item added","admin.activity.lineItemRemoved":"Line item removed","admin.activity.manualPedidoCreated":"Manual pedido created from admin","admin.activity.pedidoDeleted":"Pedido deleted","admin.activity.customerUpdated":"Customer details updated","admin.branding.title":"Branding","admin.branding.logoUrl":"Logo URL","admin.branding.faviconUrl":"Favicon URL","admin.branding.primaryColor":"Primary color","admin.branding.secondaryColor":"Secondary color","admin.branding.accentColor":"Accent color","admin.branding.accentAuto":"Auto from primary","admin.branding.whatsappNumber":"WhatsApp number","admin.branding.whatsappNumberHint":"Digits only, e.g. 593990435366","admin.branding.saved":"Saved.","admin.branding.save":"Save","admin.branding.saving":"Saving…","admin.branding.saveFailed":"Save failed.","admin.branding.whatsappTitle":"WhatsApp messages","admin.branding.whatsappNote":"Customize the messages for each step of the conversation. Leave a language empty to use the default.","admin.whatsapp.kind.customer_quote":"Customer order request","admin.whatsapp.kind.business_followup":"Follow-up","admin.whatsapp.kind.business_accepted":"Order accepted","admin.whatsapp.kind.business_rejected":"Order declined","admin.whatsapp.kind.business_updated_proposal":"Updated proposal","admin.whatsapp.kind.business_final_order":"Final order","admin.whatsapp.kind.business_confirmation_request":"Confirmation request","admin.whatsapp.kindHint.customer_quote":"The message your customer sends when they request an order over WhatsApp.","admin.whatsapp.kindHint.business_followup":"The message you send your customer after they submit an order.","admin.whatsapp.kindHint.business_accepted":"The message you send when you confirm and accept the order.","admin.whatsapp.kindHint.business_rejected":"A polite message when you cannot move forward with an order.","admin.whatsapp.kindHint.business_updated_proposal":"Revised proposal message listing items, totals, and notes for the customer.","admin.whatsapp.kindHint.business_final_order":"Final summary sent when the order is confirmed and locked.","admin.whatsapp.kindHint.business_confirmation_request":"Gentle nudge asking the customer to confirm before you proceed.","admin.whatsapp.group.presale":"Pre-sale","admin.whatsapp.group.postsale":"Post-sale","admin.whatsapp.tone.friendly":"Friendly","admin.whatsapp.tone.formal":"Formal","admin.whatsapp.tone.premium":"Premium","admin.whatsapp.tone.short":"Short","admin.whatsapp.applyTone":"Apply tone","admin.whatsapp.applyToneApplied":"Tone applied.","admin.whatsapp.useDefault":"Use default","admin.whatsapp.usingDefault":"Using the system default.","admin.whatsapp.placeholdersTitle":"Available placeholders","admin.whatsapp.placeholdersHint":"Click a placeholder to insert it at the cursor.","admin.whatsapp.previewTitle":"Preview with sample data","admin.whatsapp.previewHint":"Preview with fake data. Placeholders are filled in when the message is sent.","admin.whatsapp.toneRow":"Suggested tone","admin.branding.colorsTitle":"Colors","admin.branding.themeTitle":"Visual style","admin.branding.preset":"Preset","admin.branding.backgroundStyle":"Background","admin.branding.cornerStyle":"Corners","admin.branding.buttonStyle":"Buttons","admin.branding.cardStyle":"Cards","admin.branding.previewTitle":"Preview","admin.branding.reset":"Reset theme","admin.branding.viewPublicPage":"View public page","admin.branding.publicUrlLabel":"Public storefront URL","admin.branding.subdomainUpgradeNote":"Your own subdomain (slug.vendrae.app) is available from the Basic plan.","admin.branding.contrastWarn":"Low contrast: {label} ({ratio}:1)","admin.branding.contrastTextNeeds":"Text needs at least 4.5:1.","admin.branding.previewHeroTitle":"Your business, your style","admin.branding.previewCta":"Order now","admin.branding.previewCardTitle":"Sample product","admin.branding.previewLink":"Customize & order","admin.preset.minimal":"Minimal","admin.preset.premium":"Premium","admin.preset.friendly":"Friendly","admin.preset.bold":"Bold","admin.preset.elegant":"Elegant","admin.preset.playful":"Playful","admin.preset.custom":"Custom","admin.themeOpt.solid":"Solid","admin.themeOpt.gradient":"Gradient","admin.themeOpt.sharp":"Sharp","admin.themeOpt.rounded":"Rounded","admin.themeOpt.pill":"Pill","admin.themeOpt.outline":"Outline","admin.themeOpt.flat":"Flat","admin.themeOpt.elevated":"Elevated","admin.quote.notes":"Customer notes","admin.quote.grandTotal":"Order total","admin.quote.openWhatsapp":"Open WhatsApp","admin.quote.copyFollowUp":"Copy follow-up message","admin.quote.copied":"Copied!","admin.quote.followUpHi":"Hi {name}, thanks for your interest.","admin.quote.followUpHiAnon":"Hi there, thanks for your interest.","admin.quote.followUpRef":"About your order {number} ({total}):","admin.quote.followUpClose":"How can we help you move forward?","admin.quote.internalNotes":"Internal notes","admin.quote.internalNotesHint":"Only your team sees these. Handy for logging follow-ups and decisions.","admin.quote.noNotesYet":"No notes yet.","admin.quote.unknownAuthor":"Unknown","admin.quote.notePlaceholder":"Write an internal note…","admin.quote.addNote":"Add note","admin.quote.savingNote":"Saving…","admin.quote.noteFailed":"Couldn't save the note.","admin.quote.markAs.contacted":"Mark contacted","admin.quote.markAs.in_negotiation":"In negotiation","admin.quote.markAs.accepted":"Accept","admin.quote.markAs.rejected":"Reject","admin.quote.sendAccepted":"Send acceptance","admin.quote.sendRejected":"Send rejection","admin.quote.copyAccepted":"Copy acceptance","admin.quote.copyRejected":"Copy rejection","admin.quote.statusMenu.label":"Change status","admin.quote.statusMenu.heading":"Move to","admin.quote.statusMenu.terminal":"No further transitions allowed.","admin.quote.statusMenu.addStatus":"New status…","admin.quote.statusMenu.confirmContinue":"Continue","admin.quote.statusMenu.confirmCancel":"Cancel","admin.quote.statusModal.title":"Change status","admin.quote.statusModal.confirmIrreversible":"This is a one-way move for this status. Continue?","admin.quote.statusModal.search":"Search statuses…","admin.quote.postStatus.accepted":"Marked as accepted. Send acceptance message?","admin.quote.postStatus.rejected":"Marked as rejected. Send rejection message?","admin.quote.postStatus.dismiss":"Dismiss","admin.quote.eventsCount":"{count} events","admin.quote.notesCount":"{count} notes","admin.quote.revisionsCount":"{count} revisions","admin.quote.itemBreakdown.show":"Show breakdown","admin.quote.itemBreakdown.hide":"Hide breakdown","admin.pedido.history.title":"Revision history","admin.pedido.history.empty":"No revisions have been saved for this order yet.","admin.pedido.history.revisionLabel":"Revision #{number}","admin.pedido.history.itemsCount":"{count} items","admin.pedido.history.created":"Created {when}","admin.pedido.history.viewItems":"View items","admin.pedido.history.hideItems":"Hide items","admin.pedido.revisionStatus.draft":"Draft","admin.pedido.revisionStatus.sent":"Sent","admin.pedido.revisionStatus.finalized":"Finalized","admin.pedido.revisionStatus.superseded":"Superseded","admin.pedido.summary.title":"Order detail","admin.pedido.summary.noneYet":"No revision has been saved yet.","admin.pedido.summary.latestRevision":"Current revision: #{number}","admin.pedido.summary.subtotal":"Subtotal","admin.pedido.summary.discount":"Discounts","admin.pedido.summary.charges":"Charges","admin.pedido.summary.total":"Total","admin.pedido.loadFailed":"Could not load the revision history.","admin.pedido.editor.title":"Edit order","admin.pedido.editor.readOnly":"Read only","admin.pedido.editor.finalizedBadge":"Order finalized","admin.pedido.editor.items.title":"Items","admin.pedido.editor.items.name":"Item","admin.pedido.editor.items.quantity":"Quantity","admin.pedido.editor.items.unitPrice":"Unit price","admin.pedido.editor.items.lineDiscount":"Item discount","admin.pedido.editor.items.lineTotal":"Item total","admin.pedido.editor.items.remove":"Remove","admin.pedido.editor.items.addManual":"Add manual item","admin.pedido.editor.items.addFromCatalog":"Add from catalog","admin.pedido.editor.items.catalogPlaceholder":"Select an item…","admin.pedido.editor.items.catalogEmpty":"No catalog items yet.","admin.pedido.editor.items.newName":"Custom item","admin.pedido.editor.items.empty":"Add at least one item before saving the revision.","admin.pedido.editor.adjustments.title":"Discounts and charges","admin.pedido.editor.adjustments.add":"Add adjustment","admin.pedido.editor.adjustments.label":"Label","admin.pedido.editor.adjustments.type.discount":"Discount","admin.pedido.editor.adjustments.type.charge":"Charge","admin.pedido.editor.adjustments.amountType.fixed":"Fixed amount","admin.pedido.editor.adjustments.amountType.percentage":"Percentage","admin.pedido.editor.adjustments.amount":"Amount","admin.pedido.editor.adjustments.reason":"Reason (optional)","admin.pedido.editor.adjustments.headerType":"Type","admin.pedido.editor.adjustments.headerAmountType":"Amount type","admin.pedido.editor.notes.customer":"Notes for the customer","admin.pedido.editor.notes.customerPlaceholder":"Details the customer will see on the proposal…","admin.pedido.editor.totals.subtotal":"Subtotal","admin.pedido.editor.totals.discount":"Discounts","admin.pedido.editor.totals.charges":"Charges","admin.pedido.editor.totals.total":"Total","admin.pedido.editor.actions.saveDraft":"Save draft","admin.pedido.editor.actions.saveAndSend":"Save and send proposal","admin.pedido.editor.actions.finalize":"Finalize order","admin.pedido.editor.actions.saving":"Saving…","admin.pedido.editor.actions.sending":"Sending…","admin.pedido.editor.actions.finalizing":"Finalizing…","admin.pedido.editor.validation.itemsRequired":"Add at least one item before saving.","admin.pedido.editor.validation.finalizeBlocked":"Mark the order as accepted before finalizing.","admin.pedido.editor.saveFailed":"Could not save the revision.","admin.pedido.editor.sentSuccess":"Proposal sent to the customer.","admin.pedido.editor.finalizeSuccess":"Order finalized.","admin.pedido.editor.draftSavedSuccess":"Draft saved.","admin.pedido.message.title":"Customer message","admin.pedido.message.openWhatsapp":"Open WhatsApp","admin.pedido.message.copy":"Copy message","admin.pedido.message.copied":"Copied!","admin.pedido.message.missingPhone":"Add a phone number to the customer to open WhatsApp.","admin.pedido.message.requestConfirmation":"Request confirmation","admin.pedido.message.confirmationCopied":"Confirmation message copied.","admin.pedido.message.finalSummaryTitle":"Final order summary","admin.pedido.message.copyFinalSummary":"Copy final summary","admin.team.title":"Team","admin.team.role":"Role: {role}","admin.team.future":"Inviting teammates and managing roles is planned for a future release.","admin.nav.settings":"Settings","admin.nav.businessProfile":"Business Profile","admin.settings.businessProfile.title":"Business Profile","admin.settings.businessProfile.subtitle":"Configure the commercial information your customers see on your public page and orders.","admin.settings.businessProfile.openPublic":"View public page","admin.settings.businessProfile.copyLink":"Copy link","admin.settings.businessProfile.linkCopied":"Link copied","admin.settings.businessProfile.save":"Save changes","admin.settings.businessProfile.saving":"Saving…","admin.settings.businessProfile.saved":"Profile updated","admin.settings.businessProfile.saveFailed":"Couldn't save the profile. Please try again.","admin.settings.businessProfile.loadFailed":"Couldn't load the profile.","admin.settings.businessProfile.cardIdentity":"Identity","admin.settings.businessProfile.cardContact":"Contact","admin.settings.businessProfile.cardSocial":"Social & links","admin.settings.businessProfile.cardDisclaimer":"Order disclaimer","admin.settings.businessProfile.cardPreview":"Public preview","admin.settings.businessProfile.businessName":"Business name","admin.settings.businessProfile.publicSlug":"Public URL","admin.settings.businessProfile.publicSlugHint":"For safety this URL is not editable from here during the demo.","admin.settings.businessProfile.industry":"Industry","admin.settings.businessProfile.industryPlaceholder":"e.g. 3D printing, Catering, Photography","admin.settings.businessProfile.description":"Short description","admin.settings.businessProfile.descriptionHint":"Used as a fallback subtitle on your landing and as public metadata.","admin.settings.businessProfile.defaultLanguage":"Default language","admin.settings.businessProfile.defaultCurrency":"Currency","admin.settings.businessProfile.whatsappNumber":"WhatsApp","admin.settings.businessProfile.whatsappNumberHint":"Digits only, including country code. Used for orders and messages.","admin.settings.businessProfile.email":"Contact email","admin.settings.businessProfile.phone":"Phone","admin.settings.businessProfile.addressLine":"Address","admin.settings.businessProfile.city":"City","admin.settings.businessProfile.country":"Country","admin.settings.businessProfile.serviceArea":"Service area","admin.settings.businessProfile.serviceAreaPlaceholder":"e.g. Guayaquil & Samborondón · Online · Nationwide","admin.settings.businessProfile.businessHours":"Business hours","admin.settings.businessProfile.businessHoursPlaceholder":"e.g. Mon–Sat, 9 AM–6 PM","admin.settings.businessProfile.websiteUrl":"Website","admin.settings.businessProfile.instagramUrl":"Instagram","admin.settings.businessProfile.tiktokUrl":"TikTok","admin.settings.businessProfile.facebookUrl":"Facebook","admin.settings.businessProfile.linkedinUrl":"LinkedIn","admin.settings.businessProfile.quoteDisclaimer":"Disclaimer text","admin.settings.businessProfile.quoteDisclaimerHint":"Appears on order confirmation and can be used in WhatsApp templates.","admin.settings.businessProfile.quoteDisclaimerPlaceholder":"Prices are indicative and subject to final confirmation via WhatsApp.","admin.settings.businessProfile.previewLogoAlt":"Business logo","admin.settings.businessProfile.previewNoContact":"You haven't added contact info yet.","admin.nav.profile":"My Profile","admin.profile.title":"My Profile","admin.profile.subtitle":"Your personal info inside the admin. Email is managed by Cognito and read-only here.","admin.profile.save":"Save changes","admin.profile.saving":"Saving…","admin.profile.saved":"Profile updated","admin.profile.saveFailed":"Couldn't save your profile. Please try again.","admin.profile.loadFailed":"Couldn't load your profile.","admin.profile.summary":"Summary","admin.profile.editCard":"Your details","admin.profile.membershipCard":"Membership & role","admin.profile.actionsCard":"Account","admin.profile.displayName":"Display name","admin.profile.displayNameHint":"Shows up in internal notes, order events and the admin header.","admin.profile.email":"Email","admin.profile.emailHint":"Managed by Cognito · read-only","admin.profile.phone":"Phone","admin.profile.avatarUrl":"Avatar URL","admin.profile.preferredLanguage":"Preferred language","admin.profile.preferredLanguageHint":"Your default admin language. If you don't pick one, we use the tenant's default.","admin.profile.langInherit":"Inherit from tenant","admin.profile.currentRole":"Current role","admin.profile.currentTenant":"Active tenant","admin.profile.authProvider":"Sign-in provider","admin.profile.allMemberships":"Your memberships","admin.profile.switchTenant":"Switch tenant","admin.profile.copyPublicLink":"Copy public link","admin.profile.linkCopied":"Link copied","admin.profile.signOut":"Sign out","admin.profile.security":"Account security","admin.profile.securityHint":"Password & MFA — available in a future release.","admin.profile.notifications":"Notification preferences","admin.profile.notificationsHint":"You'll soon be able to choose which events email you.","admin.profile.comingSoon":"Coming soon","admin.profile.role.business_owner":"Business owner","admin.profile.role.tenant_admin":"Admin","admin.profile.role.sales_rep":"Sales","admin.profile.role.system_admin":"System admin","admin.profile.tenantOpenLabel":"Open","admin.nav.whatsapp":"WhatsApp Messages","admin.nav.billing":"Plan & Billing","admin.nav.statuses":"Statuses","admin.settings.collapse.label":"Toggle settings navigation","admin.statuses.title":"Quote statuses","admin.statuses.subtitle":"Customize labels, colors, order, and WhatsApp templates for your quote pipeline.","admin.statuses.addCta":"Add status","admin.statuses.column.label":"Label","admin.statuses.column.color":"Color","admin.statuses.column.order":"Order","admin.statuses.column.irreversible":"Forward-only","admin.statuses.column.template":"WhatsApp template","admin.statuses.systemBadge":"System","admin.statuses.deleteConfirm.title":"Delete this status?","admin.statuses.deleteConfirm.body":"This status is in use. Move quotes to another status before deleting.","admin.statuses.deleteConfirm.moveTo":"Move quotes to","admin.statuses.deleteConfirm.cta":"Delete status","admin.statuses.deleteBlocked.systemStatus":"System statuses cannot be deleted.","admin.statuses.modal.create.title":"New status","admin.statuses.modal.edit.title":"Edit status","admin.statuses.modal.field.labelEn":"Label (English)","admin.statuses.modal.field.labelEs":"Label (Spanish)","admin.statuses.modal.field.color":"Color","admin.statuses.modal.field.irreversible":"Forward-only (irreversible)","admin.statuses.modal.field.irreversibleHint":"Quotes in this status cannot move backward in the pipeline.","admin.statuses.modal.field.template":"WhatsApp template","admin.statuses.modal.save":"Save","admin.statuses.modal.cancel":"Cancel","admin.statuses.reorderHint":"Drag rows to reorder the pipeline sequence.","admin.whatsappSettings.title":"WhatsApp Messages","admin.whatsappSettings.subtitle":"Configure the business WhatsApp number and the templates used for orders and follow-ups.","admin.whatsappSettings.save":"Save changes","admin.whatsappSettings.saving":"Saving…","admin.whatsappSettings.saved":"Changes saved","admin.whatsappSettings.saveFailed":"Couldn't save the changes. Please try again.","admin.whatsappSettings.cardNumber":"WhatsApp number","admin.whatsappSettings.cardTemplates":"Templates by message kind","admin.team.subtitle":"Your business teammates and the roles they can hold. Inviting people lands in a future release.","admin.team.summary":"Summary","admin.team.activeMembers":"Active members","admin.team.pendingInvites":"Pending invites","admin.team.membersHeading":"Members","admin.team.colName":"Name","admin.team.colEmail":"Email","admin.team.colRole":"Role","admin.team.colStatus":"Status","admin.team.colLastActive":"Last active","admin.team.statusActive":"Active","admin.team.statusInvited":"Invite pending","admin.team.lastActiveYou":"Just now","admin.team.youSuffix":"(you)","admin.team.rolesHeading":"Available roles","admin.team.rolesIntro":"Here are the roles you'll be able to assign when invites land.","admin.team.role.business_owner.desc":"Full access to the business — plan, billing and team members.","admin.team.role.tenant_admin.desc":"Configure branding, landing, catalog, messaging and manage orders.","admin.team.role.sales_rep.desc":"Handles day-to-day orders and follows up over WhatsApp.","admin.team.inviteCta":"Invite member","admin.team.inviteCtaSubtitle":"Available in the pilot version","admin.team.inviteModalTitle":"Invite a new member","admin.team.inviteModalBody":"Once invites land, you'll be able to add members by email and assign a role.","admin.team.inviteEmailLabel":"Member's email","admin.team.inviteRoleLabel":"Role","admin.team.inviteSubmit":"Send invite","admin.team.inviteAvailableIn":"Available in the pilot version","admin.team.close":"Close","admin.billing.title":"Plan & Billing","admin.billing.subtitle":"Your current plan and what's next when you're ready. This demo doesn't process payments.","admin.billing.currentPlan":"Current plan","admin.billing.planLabel":"Plan","admin.billing.statusActive":"Active","admin.billing.billingMode":"Billing mode","admin.billing.billingModeManual":"Manual / demo","admin.billing.renewal":"Next renewal","admin.billing.renewalNone":"Not configured","admin.billing.usageHeading":"Usage","admin.billing.usage.products":"Active products","admin.billing.usage.quotes":"Orders this month","admin.billing.usage.team":"Team members","admin.billing.usage.landingEnabled":"Public landing","admin.billing.usage.whatsappTemplates":"WhatsApp templates","admin.billing.usageYes":"Enabled","admin.billing.usageNo":"Disabled","admin.billing.usageOfLimit":"{used} of {limit}","admin.billing.planHeading":"Compare plans","admin.billing.planSubheading":"You're on the demo Starter today. When you grow we can move to Growth or Enterprise.","admin.billing.tier.starter":"Starter","admin.billing.tier.growth":"Growth","admin.billing.tier.enterprise":"Enterprise","admin.billing.tier.starter.body1":"Branded public page","admin.billing.tier.starter.body2":"Product & service catalog","admin.billing.tier.starter.body3":"Multi-item orders","admin.billing.tier.starter.body4":"WhatsApp handoff","admin.billing.tier.growth.body1":"More products & team members","admin.billing.tier.growth.body2":"Advanced follow-up templates","admin.billing.tier.growth.body3":"Sales analytics","admin.billing.tier.growth.body4":"Funnel & per-channel metrics","admin.billing.tier.enterprise.body1":"Custom domain","admin.billing.tier.enterprise.body2":"SSO / SAML & SCIM","admin.billing.tier.enterprise.body3":"API & integrations","admin.billing.tier.enterprise.body4":"Dedicated support","admin.billing.upgrade":"Upgrade plan","admin.billing.contactUs":"Contact us","admin.billing.currentBadge":"Current plan","admin.billing.comingSoonBadge":"Coming soon","admin.billing.sim.notSelected":"No plan selected","admin.billing.sim.pendingActivation":"Pending activation","admin.billing.sim.demoActive":"Demo active","admin.billing.sim.inactive":"Inactive","admin.billing.sim.suspended":"Suspended","admin.billing.simStatusLabel":"Subscription status","admin.billing.publicSiteLabel":"Public site","admin.billing.publicSiteActive":"Visible to customers","admin.billing.publicSiteInactive":"Not visible yet","admin.billing.publicSiteSuspended":"Suspended","admin.billing.activateCta":"Activate pilot plan","admin.billing.activatingCta":"Activating…","admin.billing.deactivateCta":"Deactivate (back to draft)","admin.billing.activatedToast":"Done! Your public site is active.","admin.billing.deactivatedToast":"Your site is hidden again.","admin.billing.futureBillingNote":"Real card-based billing will arrive in a later release. For now, every plan is a no-charge demo.","admin.billing.recommendedBadge":"Recommended","admin.billing.monthly":"/ mo","admin.billing.free":"Free","admin.billing.planTagline.starter":"Start receiving orders over WhatsApp.","admin.billing.planTagline.growth":"Scale your catalog and your team.","admin.billing.planTagline.pro":"For established brands with multiple teams.","admin.billing.activeBadge":"Active","admin.dashboard.banner.inactiveTitle":"Your public site is not active yet","admin.dashboard.banner.inactiveBody":"Activate the demo plan (no charge) so customers can see your catalog and send you orders.","admin.dashboard.banner.inactiveCta":"Activate demo plan","admin.dashboard.banner.previewCta":"Preview as customer","admin.settings.businessProfile.cardLifecycle":"Public site","admin.settings.businessProfile.slugCopy":"Copy subdomain","admin.settings.businessProfile.slugCopied":"Copied!","admin.settings.businessProfile.slugLockNote":"After the business is created the subdomain is locked so links you share with customers keep working.","admin.settings.businessProfile.domainFutureNote":"Subdomain rename and custom domain (e.g. yourbrand.com) will arrive in a later release.","admin.settings.businessProfile.manageBilling":"Manage subscription","admin.shell.openMenu":"Open menu","admin.shell.closeMenu":"Close menu","admin.shell.mobileBuilderNotice":"For advanced product editing we recommend a larger screen.","admin.catalog.emptyTitle":"You don't have any published products yet","admin.catalog.emptyBody":"Create your first product to start receiving orders from your public page.","admin.catalog.emptyPrimary":"Create product","admin.catalog.emptySecondary":"Use a template","admin.quotes.emptyTitle":"You haven't received any orders yet","admin.quotes.emptyBody":"Share your public page so customers can order your products or services.","admin.quotes.emptyPrimary":"Copy public link","admin.quotes.emptySecondary":"View public page","admin.quotes.emptyFilteredTitle":"No matches for these filters","admin.quotes.emptyFilteredBody":"Try adjusting or clearing the filters to see all your orders again.","admin.dashboard.noQuotesTitle":"No recent orders yet","admin.dashboard.noQuotesBody":"Share your public page with your customers to get your first order."},ns={es:ey,en:ty};function ny(e,t){return t?e.replace(/\{(\w+)\}/g,(n,a)=>a in t?String(t[a]):`{${a}}`):e}function ay(e,t,n){const i=(ns[e]??ns[zr])[t]??ns[zr][t]??t;return ny(i,n)}const Ap="vendrae_lang",Ip=S.createContext(null);function iy(){if(typeof window>"u")return zr;const e=window.localStorage.getItem(Ap);return Jh(e)?e:zr}function ry({children:e}){const[t,n]=S.useState(iy);S.useEffect(()=>{window.localStorage.setItem(Ap,t),document.documentElement.lang=t},[t]);const a=S.useCallback(o=>n(o),[]),i=S.useCallback((o,s)=>ay(t,o,s),[t]),r=S.useMemo(()=>({lang:t,setLang:a,t:i}),[t,a,i]);return d.jsx(Ip.Provider,{value:r,children:e})}function bo(){const e=S.useContext(Ip);if(!e)throw new Error("useI18n must be used within an I18nProvider");return e}function ht(){return bo().t}function oy({className:e=""}){const{lang:t,setLang:n,t:a}=bo();return d.jsxs("label",{className:`inline-flex items-center gap-1.5 text-sm ${e}`,children:[d.jsx("span",{"aria-hidden":"true",children:"🌐"}),d.jsx("span",{className:"sr-only",children:a("language.label")}),d.jsx("select",{"aria-label":a("language.label"),value:t,onChange:i=>n(i.target.value),className:"cursor-pointer rounded-md border border-gray-300 bg-white px-2 py-1 text-sm text-gray-700",children:Np.map(i=>d.jsx("option",{value:i.code,children:i.label},i.code))})]})}/** * @remix-run/router v1.23.2 * * Copyright (c) Remix Software Inc. * * This source code is licensed under the MIT license found in the * LICENSE.md file in the root directory of this source tree. * * @license MIT */function wi(){return wi=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u")throw new Error(t)}function fd(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function ly(){return Math.random().toString(36).substr(2,8)}function Vu(e,t){return{usr:e.state,key:e.key,idx:t}}function nl(e,t,n,a){return n===void 0&&(n=null),wi({pathname:typeof e=="string"?e:e.pathname,search:"",hash:""},typeof t=="string"?_a(t):t,{state:n,key:t&&t.key||a||ly()})}function Ur(e){let{pathname:t="/",search:n="",hash:a=""}=e;return n&&n!=="?"&&(t+=n.charAt(0)==="?"?n:"?"+n),a&&a!=="#"&&(t+=a.charAt(0)==="#"?a:"#"+a),t}function _a(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substr(n),e=e.substr(0,n));let a=e.indexOf("?");a>=0&&(t.search=e.substr(a),e=e.substr(0,a)),e&&(t.pathname=e)}return t}function dy(e,t,n,a){a===void 0&&(a={});let{window:i=document.defaultView,v5Compat:r=!1}=a,o=i.history,s=Kt.Pop,l=null,u=p();u==null&&(u=0,o.replaceState(wi({},o.state,{idx:u}),""));function p(){return(o.state||{idx:null}).idx}function f(){s=Kt.Pop;let P=p(),g=P==null?null:P-u;u=P,l&&l({action:s,location:v.location,delta:g})}function h(P,g){s=Kt.Push;let m=nl(v.location,P,g);u=p()+1;let y=Vu(m,u),b=v.createHref(m);try{o.pushState(y,"",b)}catch(j){if(j instanceof DOMException&&j.name==="DataCloneError")throw j;i.location.assign(b)}r&&l&&l({action:s,location:v.location,delta:1})}function x(P,g){s=Kt.Replace;let m=nl(v.location,P,g);u=p();let y=Vu(m,u),b=v.createHref(m);o.replaceState(y,"",b),r&&l&&l({action:s,location:v.location,delta:0})}function k(P){let g=i.location.origin!=="null"?i.location.origin:i.location.href,m=typeof P=="string"?P:Ur(P);return m=m.replace(/ $/,"%20"),he(g,"No window.location.(origin|href) available to create URL for href: "+m),new URL(m,g)}let v={get action(){return s},get location(){return e(i,o)},listen(P){if(l)throw new Error("A history only accepts one active listener");return i.addEventListener(Hu,f),l=P,()=>{i.removeEventListener(Hu,f),l=null}},createHref(P){return t(i,P)},createURL:k,encodeLocation(P){let g=k(P);return{pathname:g.pathname,search:g.search,hash:g.hash}},push:h,replace:x,go(P){return o.go(P)}};return v}var Wu;(function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"})(Wu||(Wu={}));function uy(e,t,n){return n===void 0&&(n="/"),cy(e,t,n)}function cy(e,t,n,a){let i=typeof t=="string"?_a(t):t,r=gd(i.pathname||"/",n);if(r==null)return null;let o=Lp(e);my(o);let s=null;for(let l=0;s==null&&l{let l={relativePath:s===void 0?r.path||"":s,caseSensitive:r.caseSensitive===!0,childrenIndex:o,route:r};l.relativePath.startsWith("/")&&(he(l.relativePath.startsWith(a),'Absolute route path "'+l.relativePath+'" nested under path '+('"'+a+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),l.relativePath=l.relativePath.slice(a.length));let u=sn([a,l.relativePath]),p=n.concat(l);r.children&&r.children.length>0&&(he(r.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+u+'".')),Lp(r.children,t,p,u)),!(r.path==null&&!r.index)&&t.push({path:u,score:by(u,r.index),routesMeta:p})};return e.forEach((r,o)=>{var s;if(r.path===""||!((s=r.path)!=null&&s.includes("?")))i(r,o);else for(let l of qp(r.path))i(r,o,l)}),t}function qp(e){let t=e.split("/");if(t.length===0)return[];let[n,...a]=t,i=n.endsWith("?"),r=n.replace(/\?$/,"");if(a.length===0)return i?[r,""]:[r];let o=qp(a.join("/")),s=[];return s.push(...o.map(l=>l===""?r:[r,l].join("/"))),i&&s.push(...o),s.map(l=>e.startsWith("/")&&l===""?"/":l)}function my(e){e.sort((t,n)=>t.score!==n.score?n.score-t.score:xy(t.routesMeta.map(a=>a.childrenIndex),n.routesMeta.map(a=>a.childrenIndex)))}const py=/^:[\w-]+$/,fy=3,gy=2,hy=1,yy=10,vy=-2,Qu=e=>e==="*";function by(e,t){let n=e.split("/"),a=n.length;return n.some(Qu)&&(a+=vy),t&&(a+=gy),n.filter(i=>!Qu(i)).reduce((i,r)=>i+(py.test(r)?fy:r===""?hy:yy),a)}function xy(e,t){return e.length===t.length&&e.slice(0,-1).every((a,i)=>a===t[i])?e[e.length-1]-t[t.length-1]:0}function Sy(e,t,n){let{routesMeta:a}=e,i={},r="/",o=[];for(let s=0;s{let{paramName:h,isOptional:x}=p;if(h==="*"){let v=s[f]||"";o=r.slice(0,r.length-v.length).replace(/(.)\/+$/,"$1")}const k=s[f];return x&&!k?u[h]=void 0:u[h]=(k||"").replace(/%2F/g,"/"),u},{}),pathname:r,pathnameBase:o,pattern:e}}function ky(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!0),fd(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 a=[],i="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(o,s,l)=>(a.push({paramName:s,isOptional:l!=null}),l?"/?([^\\/]+)?":"/([^\\/]+)"));return e.endsWith("*")?(a.push({paramName:"*"}),i+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?i+="\\/*$":e!==""&&e!=="/"&&(i+="(?:(?=\\/|$))"),[new RegExp(i,t?void 0:"i"),a]}function Cy(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return fd(!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 gd(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,a=e.charAt(n);return a&&a!=="/"?null:e.slice(n)||"/"}const Py=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,_y=e=>Py.test(e);function jy(e,t){t===void 0&&(t="/");let{pathname:n,search:a="",hash:i=""}=typeof e=="string"?_a(e):e,r;if(n)if(_y(n))r=n;else{if(n.includes("//")){let o=n;n=n.replace(/\/\/+/g,"/"),fd(!1,"Pathnames cannot have embedded double slashes - normalizing "+(o+" -> "+n))}n.startsWith("/")?r=Gu(n.substring(1),"/"):r=Gu(n,t)}else r=t;return{pathname:r,search:Ny(a),hash:Ay(i)}}function Gu(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(i=>{i===".."?n.length>1&&n.pop():i!=="."&&n.push(i)}),n.length>1?n.join("/"):"/"}function as(e,t,n,a){return"Cannot include a '"+e+"' character in a manually specified "+("`to."+t+"` field ["+JSON.stringify(a)+"]. Please separate it out to the ")+("`to."+n+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function Ty(e){return e.filter((t,n)=>n===0||t.route.path&&t.route.path.length>0)}function hd(e,t){let n=Ty(e);return t?n.map((a,i)=>i===n.length-1?a.pathname:a.pathnameBase):n.map(a=>a.pathnameBase)}function yd(e,t,n,a){a===void 0&&(a=!1);let i;typeof e=="string"?i=_a(e):(i=wi({},e),he(!i.pathname||!i.pathname.includes("?"),as("?","pathname","search",i)),he(!i.pathname||!i.pathname.includes("#"),as("#","pathname","hash",i)),he(!i.search||!i.search.includes("#"),as("#","search","hash",i)));let r=e===""||i.pathname==="",o=r?"/":i.pathname,s;if(o==null)s=n;else{let f=t.length-1;if(!a&&o.startsWith("..")){let h=o.split("/");for(;h[0]==="..";)h.shift(),f-=1;i.pathname=h.join("/")}s=f>=0?t[f]:"/"}let l=jy(i,s),u=o&&o!=="/"&&o.endsWith("/"),p=(r||o===".")&&n.endsWith("/");return!l.pathname.endsWith("/")&&(u||p)&&(l.pathname+="/"),l}const sn=e=>e.join("/").replace(/\/\/+/g,"/"),Ey=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),Ny=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,Ay=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;function Iy(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}const Rp=["post","put","patch","delete"];new Set(Rp);const Ly=["get",...Rp];new Set(Ly);/** * React Router v6.30.3 * * Copyright (c) Remix Software Inc. * * This source code is licensed under the MIT license found in the * LICENSE.md file in the root directory of this source tree. * * @license MIT */function ki(){return ki=Object.assign?Object.assign.bind():function(e){for(var t=1;t{s.current=!0}),S.useCallback(function(u,p){if(p===void 0&&(p={}),!s.current)return;if(typeof u=="number"){a.go(u);return}let f=yd(u,JSON.parse(o),r,p.relative==="path");e==null&&t!=="/"&&(f.pathname=f.pathname==="/"?t:sn([t,f.pathname])),(p.replace?a.replace:a.push)(f,p.state,p)},[t,a,o,r,e])}const My=S.createContext(null);function zy(e){let t=S.useContext(Ct).outlet;return t&&S.createElement(My.Provider,{value:e},t)}function Ea(){let{matches:e}=S.useContext(Ct),t=e[e.length-1];return t?t.params:{}}function zp(e,t){let{relative:n}=t===void 0?{}:t,{future:a}=S.useContext(fn),{matches:i}=S.useContext(Ct),{pathname:r}=Ta(),o=JSON.stringify(hd(i,a.v7_relativeSplatPath));return S.useMemo(()=>yd(e,JSON.parse(o),r,n==="path"),[e,o,r,n])}function Uy(e,t){return Oy(e,t)}function Oy(e,t,n,a){ja()||he(!1);let{navigator:i}=S.useContext(fn),{matches:r}=S.useContext(Ct),o=r[r.length-1],s=o?o.params:{};o&&o.pathname;let l=o?o.pathnameBase:"/";o&&o.route;let u=Ta(),p;if(t){var f;let P=typeof t=="string"?_a(t):t;l==="/"||(f=P.pathname)!=null&&f.startsWith(l)||he(!1),p=P}else p=u;let h=p.pathname||"/",x=h;if(l!=="/"){let P=l.replace(/^\//,"").split("/");x="/"+h.replace(/^\//,"").split("/").slice(P.length).join("/")}let k=uy(e,{pathname:x}),v=Vy(k&&k.map(P=>Object.assign({},P,{params:Object.assign({},s,P.params),pathname:sn([l,i.encodeLocation?i.encodeLocation(P.pathname).pathname:P.pathname]),pathnameBase:P.pathnameBase==="/"?l:sn([l,i.encodeLocation?i.encodeLocation(P.pathnameBase).pathname:P.pathnameBase])})),r,n,a);return t&&v?S.createElement(xo.Provider,{value:{location:ki({pathname:"/",search:"",hash:"",state:null,key:"default"},p),navigationType:Kt.Pop}},v):v}function Fy(){let e=Zy(),t=Iy(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,i={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return S.createElement(S.Fragment,null,S.createElement("h2",null,"Unexpected Application Error!"),S.createElement("h3",{style:{fontStyle:"italic"}},t),n?S.createElement("pre",{style:i},n):null,null)}const By=S.createElement(Fy,null);class $y extends S.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,n){return n.location!==t.location||n.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:n.error,location:n.location,revalidation:t.revalidation||n.revalidation}}componentDidCatch(t,n){console.error("React Router caught the following error during render",t,n)}render(){return this.state.error!==void 0?S.createElement(Ct.Provider,{value:this.props.routeContext},S.createElement(Dp.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function Hy(e){let{routeContext:t,match:n,children:a}=e,i=S.useContext(vd);return i&&i.static&&i.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(i.staticContext._deepestRenderedBoundaryId=n.route.id),S.createElement(Ct.Provider,{value:t},a)}function Vy(e,t,n,a){var i;if(t===void 0&&(t=[]),n===void 0&&(n=null),a===void 0&&(a=null),e==null){var r;if(!n)return null;if(n.errors)e=n.matches;else if((r=a)!=null&&r.v7_partialHydration&&t.length===0&&!n.initialized&&n.matches.length>0)e=n.matches;else return null}let o=e,s=(i=n)==null?void 0:i.errors;if(s!=null){let p=o.findIndex(f=>f.route.id&&(s==null?void 0:s[f.route.id])!==void 0);p>=0||he(!1),o=o.slice(0,Math.min(o.length,p+1))}let l=!1,u=-1;if(n&&a&&a.v7_partialHydration)for(let p=0;p=0?o=o.slice(0,u+1):o=[o[0]];break}}}return o.reduceRight((p,f,h)=>{let x,k=!1,v=null,P=null;n&&(x=s&&f.route.id?s[f.route.id]:void 0,v=f.route.errorElement||By,l&&(u<0&&h===0?(Ky("route-fallback"),k=!0,P=null):u===h&&(k=!0,P=f.route.hydrateFallbackElement||null)));let g=t.concat(o.slice(0,h+1)),m=()=>{let y;return x?y=v:k?y=P:f.route.Component?y=S.createElement(f.route.Component,null):f.route.element?y=f.route.element:y=p,S.createElement(Hy,{match:f,routeContext:{outlet:p,matches:g,isDataRoute:n!=null},children:y})};return n&&(f.route.ErrorBoundary||f.route.errorElement||h===0)?S.createElement($y,{location:n.location,revalidation:n.revalidation,component:v,error:x,children:m(),routeContext:{outlet:null,matches:g,isDataRoute:!0}}):m()},null)}var Up=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(Up||{}),Op=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}(Op||{});function Wy(e){let t=S.useContext(vd);return t||he(!1),t}function Qy(e){let t=S.useContext(qy);return t||he(!1),t}function Gy(e){let t=S.useContext(Ct);return t||he(!1),t}function Fp(e){let t=Gy(),n=t.matches[t.matches.length-1];return n.route.id||he(!1),n.route.id}function Zy(){var e;let t=S.useContext(Dp),n=Qy(),a=Fp();return t!==void 0?t:(e=n.errors)==null?void 0:e[a]}function Yy(){let{router:e}=Wy(Up.UseNavigateStable),t=Fp(Op.UseNavigateStable),n=S.useRef(!1);return Mp(()=>{n.current=!0}),S.useCallback(function(i,r){r===void 0&&(r={}),n.current&&(typeof i=="number"?e.navigate(i):e.navigate(i,ki({fromRouteId:t},r)))},[e,t])}const Zu={};function Ky(e,t,n){Zu[e]||(Zu[e]=!0)}function Xy(e,t){e==null||e.v7_startTransition,e==null||e.v7_relativeSplatPath}function Jy(e){let{to:t,replace:n,state:a,relative:i}=e;ja()||he(!1);let{future:r,static:o}=S.useContext(fn),{matches:s}=S.useContext(Ct),{pathname:l}=Ta(),u=So(),p=yd(t,hd(s,r.v7_relativeSplatPath),l,i==="path"),f=JSON.stringify(p);return S.useEffect(()=>u(JSON.parse(f),{replace:n,state:a,relative:i}),[u,f,i,n,a]),null}function ev(e){return zy(e.context)}function jt(e){he(!1)}function tv(e){let{basename:t="/",children:n=null,location:a,navigationType:i=Kt.Pop,navigator:r,static:o=!1,future:s}=e;ja()&&he(!1);let l=t.replace(/^\/*/,"/"),u=S.useMemo(()=>({basename:l,navigator:r,static:o,future:ki({v7_relativeSplatPath:!1},s)}),[l,s,r,o]);typeof a=="string"&&(a=_a(a));let{pathname:p="/",search:f="",hash:h="",state:x=null,key:k="default"}=a,v=S.useMemo(()=>{let P=gd(p,l);return P==null?null:{location:{pathname:P,search:f,hash:h,state:x,key:k},navigationType:i}},[l,p,f,h,x,k,i]);return v==null?null:S.createElement(fn.Provider,{value:u},S.createElement(xo.Provider,{children:n,value:v}))}function nv(e){let{children:t,location:n}=e;return Uy(al(t),n)}new Promise(()=>{});function al(e,t){t===void 0&&(t=[]);let n=[];return S.Children.forEach(e,(a,i)=>{if(!S.isValidElement(a))return;let r=[...t,i];if(a.type===S.Fragment){n.push.apply(n,al(a.props.children,r));return}a.type!==jt&&he(!1),!a.props.index||!a.props.children||he(!1);let o={id:a.props.id||r.join("-"),caseSensitive:a.props.caseSensitive,element:a.props.element,Component:a.props.Component,index:a.props.index,path:a.props.path,loader:a.props.loader,action:a.props.action,errorElement:a.props.errorElement,ErrorBoundary:a.props.ErrorBoundary,hasErrorBoundary:a.props.ErrorBoundary!=null||a.props.errorElement!=null,shouldRevalidate:a.props.shouldRevalidate,handle:a.props.handle,lazy:a.props.lazy};a.props.children&&(o.children=al(a.props.children,r)),n.push(o)}),n}/** * React Router DOM v6.30.3 * * Copyright (c) Remix Software Inc. * * This source code is licensed under the MIT license found in the * LICENSE.md file in the root directory of this source tree. * * @license MIT */function il(){return il=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&(n[i]=e[i]);return n}function iv(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function rv(e,t){return e.button===0&&(!t||t==="_self")&&!iv(e)}function rl(e){return e===void 0&&(e=""),new URLSearchParams(typeof e=="string"||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,n)=>{let a=e[n];return t.concat(Array.isArray(a)?a.map(i=>[n,i]):[[n,a]])},[]))}function ov(e,t){let n=rl(e);return t&&t.forEach((a,i)=>{n.has(i)||t.getAll(i).forEach(r=>{n.append(i,r)})}),n}const sv=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","viewTransition"],lv="6";try{window.__reactRouterVersion=lv}catch{}const dv="startTransition",Yu=Ff[dv];function uv(e){let{basename:t,children:n,future:a,window:i}=e,r=S.useRef();r.current==null&&(r.current=sy({window:i,v5Compat:!0}));let o=r.current,[s,l]=S.useState({action:o.action,location:o.location}),{v7_startTransition:u}=a||{},p=S.useCallback(f=>{u&&Yu?Yu(()=>l(f)):l(f)},[l,u]);return S.useLayoutEffect(()=>o.listen(p),[o,p]),S.useEffect(()=>Xy(a),[a]),S.createElement(tv,{basename:t,children:n,location:s.location,navigationType:s.action,navigator:o,future:a})}const cv=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",mv=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Re=S.forwardRef(function(t,n){let{onClick:a,relative:i,reloadDocument:r,replace:o,state:s,target:l,to:u,preventScrollReset:p,viewTransition:f}=t,h=av(t,sv),{basename:x}=S.useContext(fn),k,v=!1;if(typeof u=="string"&&mv.test(u)&&(k=u,cv))try{let y=new URL(window.location.href),b=u.startsWith("//")?new URL(y.protocol+u):new URL(u),j=gd(b.pathname,x);b.origin===y.origin&&j!=null?u=j+b.search+b.hash:v=!0}catch{}let P=Ry(u,{relative:i}),g=pv(u,{replace:o,state:s,target:l,preventScrollReset:p,relative:i,viewTransition:f});function m(y){a&&a(y),y.defaultPrevented||g(y)}return S.createElement("a",il({},h,{href:k||P,onClick:v||r?a:m,ref:n,target:l}))});var Ku;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(Ku||(Ku={}));var Xu;(function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(Xu||(Xu={}));function pv(e,t){let{target:n,replace:a,state:i,preventScrollReset:r,relative:o,viewTransition:s}=t===void 0?{}:t,l=So(),u=Ta(),p=zp(e,{relative:o});return S.useCallback(f=>{if(rv(f,n)){f.preventDefault();let h=a!==void 0?a:Ur(u)===Ur(p);l(e,{replace:h,state:i,preventScrollReset:r,relative:o,viewTransition:s})}},[u,l,p,a,i,n,e,r,o,s])}function fv(e){let t=S.useRef(rl(e)),n=S.useRef(!1),a=Ta(),i=S.useMemo(()=>ov(a.search,n.current?null:t.current),[a.search]),r=So(),o=S.useCallback((s,l)=>{const u=rl(typeof s=="function"?s(i):s);n.current=!0,r("?"+u,l)},[r,i]);return[i,o]}var J;(function(e){e.assertEqual=i=>{};function t(i){}e.assertIs=t;function n(i){throw new Error}e.assertNever=n,e.arrayToEnum=i=>{const r={};for(const o of i)r[o]=o;return r},e.getValidEnumValues=i=>{const r=e.objectKeys(i).filter(s=>typeof i[i[s]]!="number"),o={};for(const s of r)o[s]=i[s];return e.objectValues(o)},e.objectValues=i=>e.objectKeys(i).map(function(r){return i[r]}),e.objectKeys=typeof Object.keys=="function"?i=>Object.keys(i):i=>{const r=[];for(const o in i)Object.prototype.hasOwnProperty.call(i,o)&&r.push(o);return r},e.find=(i,r)=>{for(const o of i)if(r(o))return o},e.isInteger=typeof Number.isInteger=="function"?i=>Number.isInteger(i):i=>typeof i=="number"&&Number.isFinite(i)&&Math.floor(i)===i;function a(i,r=" | "){return i.map(o=>typeof o=="string"?`'${o}'`:o).join(r)}e.joinValues=a,e.jsonStringifyReplacer=(i,r)=>typeof r=="bigint"?r.toString():r})(J||(J={}));var Ju;(function(e){e.mergeShapes=(t,n)=>({...t,...n})})(Ju||(Ju={}));const M=J.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),Wt=e=>{switch(typeof e){case"undefined":return M.undefined;case"string":return M.string;case"number":return Number.isNaN(e)?M.nan:M.number;case"boolean":return M.boolean;case"function":return M.function;case"bigint":return M.bigint;case"symbol":return M.symbol;case"object":return Array.isArray(e)?M.array:e===null?M.null:e.then&&typeof e.then=="function"&&e.catch&&typeof e.catch=="function"?M.promise:typeof Map<"u"&&e instanceof Map?M.map:typeof Set<"u"&&e instanceof Set?M.set:typeof Date<"u"&&e instanceof Date?M.date:M.object;default:return M.unknown}},T=J.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]);class Ot extends Error{get errors(){return this.issues}constructor(t){super(),this.issues=[],this.addIssue=a=>{this.issues=[...this.issues,a]},this.addIssues=(a=[])=>{this.issues=[...this.issues,...a]};const n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=t}format(t){const n=t||function(r){return r.message},a={_errors:[]},i=r=>{for(const o of r.issues)if(o.code==="invalid_union")o.unionErrors.map(i);else if(o.code==="invalid_return_type")i(o.returnTypeError);else if(o.code==="invalid_arguments")i(o.argumentsError);else if(o.path.length===0)a._errors.push(n(o));else{let s=a,l=0;for(;ln.message){const n={},a=[];for(const i of this.issues)if(i.path.length>0){const r=i.path[0];n[r]=n[r]||[],n[r].push(t(i))}else a.push(t(i));return{formErrors:a,fieldErrors:n}}get formErrors(){return this.flatten()}}Ot.create=e=>new Ot(e);const ol=(e,t)=>{let n;switch(e.code){case T.invalid_type:e.received===M.undefined?n="Required":n=`Expected ${e.expected}, received ${e.received}`;break;case T.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(e.expected,J.jsonStringifyReplacer)}`;break;case T.unrecognized_keys:n=`Unrecognized key(s) in object: ${J.joinValues(e.keys,", ")}`;break;case T.invalid_union:n="Invalid input";break;case T.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${J.joinValues(e.options)}`;break;case T.invalid_enum_value:n=`Invalid enum value. Expected ${J.joinValues(e.options)}, received '${e.received}'`;break;case T.invalid_arguments:n="Invalid function arguments";break;case T.invalid_return_type:n="Invalid function return type";break;case T.invalid_date:n="Invalid date";break;case T.invalid_string:typeof e.validation=="object"?"includes"in e.validation?(n=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${e.validation.position}`)):"startsWith"in e.validation?n=`Invalid input: must start with "${e.validation.startsWith}"`:"endsWith"in e.validation?n=`Invalid input: must end with "${e.validation.endsWith}"`:J.assertNever(e.validation):e.validation!=="regex"?n=`Invalid ${e.validation}`:n="Invalid";break;case T.too_small:e.type==="array"?n=`Array must contain ${e.exact?"exactly":e.inclusive?"at least":"more than"} ${e.minimum} element(s)`:e.type==="string"?n=`String must contain ${e.exact?"exactly":e.inclusive?"at least":"over"} ${e.minimum} character(s)`:e.type==="number"?n=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="bigint"?n=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="date"?n=`Date must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(e.minimum))}`:n="Invalid input";break;case T.too_big:e.type==="array"?n=`Array must contain ${e.exact?"exactly":e.inclusive?"at most":"less than"} ${e.maximum} element(s)`:e.type==="string"?n=`String must contain ${e.exact?"exactly":e.inclusive?"at most":"under"} ${e.maximum} character(s)`:e.type==="number"?n=`Number must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="bigint"?n=`BigInt must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="date"?n=`Date must be ${e.exact?"exactly":e.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(e.maximum))}`:n="Invalid input";break;case T.custom:n="Invalid input";break;case T.invalid_intersection_types:n="Intersection results could not be merged";break;case T.not_multiple_of:n=`Number must be a multiple of ${e.multipleOf}`;break;case T.not_finite:n="Number must be finite";break;default:n=t.defaultError,J.assertNever(e)}return{message:n}};let gv=ol;function hv(){return gv}const yv=e=>{const{data:t,path:n,errorMaps:a,issueData:i}=e,r=[...n,...i.path||[]],o={...i,path:r};if(i.message!==void 0)return{...i,path:r,message:i.message};let s="";const l=a.filter(u=>!!u).slice().reverse();for(const u of l)s=u(o,{data:t,defaultError:s}).message;return{...i,path:r,message:s}};function L(e,t){const n=hv(),a=yv({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,n,n===ol?void 0:ol].filter(i=>!!i)});e.common.issues.push(a)}class De{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(t,n){const a=[];for(const i of n){if(i.status==="aborted")return V;i.status==="dirty"&&t.dirty(),a.push(i.value)}return{status:t.value,value:a}}static async mergeObjectAsync(t,n){const a=[];for(const i of n){const r=await i.key,o=await i.value;a.push({key:r,value:o})}return De.mergeObjectSync(t,a)}static mergeObjectSync(t,n){const a={};for(const i of n){const{key:r,value:o}=i;if(r.status==="aborted"||o.status==="aborted")return V;r.status==="dirty"&&t.dirty(),o.status==="dirty"&&t.dirty(),r.value!=="__proto__"&&(typeof o.value<"u"||i.alwaysSet)&&(a[r.value]=o.value)}return{status:t.value,value:a}}}const V=Object.freeze({status:"aborted"}),Ga=e=>({status:"dirty",value:e}),rt=e=>({status:"valid",value:e}),ec=e=>e.status==="aborted",tc=e=>e.status==="dirty",ba=e=>e.status==="valid",Or=e=>typeof Promise<"u"&&e instanceof Promise;var O;(function(e){e.errToObj=t=>typeof t=="string"?{message:t}:t||{},e.toString=t=>typeof t=="string"?t:t==null?void 0:t.message})(O||(O={}));class kt{constructor(t,n,a,i){this._cachedPath=[],this.parent=t,this.data=n,this._path=a,this._key=i}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}}const nc=(e,t)=>{if(ba(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;const n=new Ot(e.common.issues);return this._error=n,this._error}}};function Y(e){if(!e)return{};const{errorMap:t,invalid_type_error:n,required_error:a,description:i}=e;if(t&&(n||a))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return t?{errorMap:t,description:i}:{errorMap:(o,s)=>{const{message:l}=e;return o.code==="invalid_enum_value"?{message:l??s.defaultError}:typeof s.data>"u"?{message:l??a??s.defaultError}:o.code!=="invalid_type"?{message:s.defaultError}:{message:l??n??s.defaultError}},description:i}}class X{get description(){return this._def.description}_getType(t){return Wt(t.data)}_getOrReturnCtx(t,n){return n||{common:t.parent.common,data:t.data,parsedType:Wt(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}_processInputParams(t){return{status:new De,ctx:{common:t.parent.common,data:t.data,parsedType:Wt(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}}_parseSync(t){const n=this._parse(t);if(Or(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(t){const n=this._parse(t);return Promise.resolve(n)}parse(t,n){const a=this.safeParse(t,n);if(a.success)return a.data;throw a.error}safeParse(t,n){const a={common:{issues:[],async:(n==null?void 0:n.async)??!1,contextualErrorMap:n==null?void 0:n.errorMap},path:(n==null?void 0:n.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:Wt(t)},i=this._parseSync({data:t,path:a.path,parent:a});return nc(a,i)}"~validate"(t){var a,i;const n={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:Wt(t)};if(!this["~standard"].async)try{const r=this._parseSync({data:t,path:[],parent:n});return ba(r)?{value:r.value}:{issues:n.common.issues}}catch(r){(i=(a=r==null?void 0:r.message)==null?void 0:a.toLowerCase())!=null&&i.includes("encountered")&&(this["~standard"].async=!0),n.common={issues:[],async:!0}}return this._parseAsync({data:t,path:[],parent:n}).then(r=>ba(r)?{value:r.value}:{issues:n.common.issues})}async parseAsync(t,n){const a=await this.safeParseAsync(t,n);if(a.success)return a.data;throw a.error}async safeParseAsync(t,n){const a={common:{issues:[],contextualErrorMap:n==null?void 0:n.errorMap,async:!0},path:(n==null?void 0:n.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:Wt(t)},i=this._parse({data:t,path:a.path,parent:a}),r=await(Or(i)?i:Promise.resolve(i));return nc(a,r)}refine(t,n){const a=i=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(i):n;return this._refinement((i,r)=>{const o=t(i),s=()=>r.addIssue({code:T.custom,...a(i)});return typeof Promise<"u"&&o instanceof Promise?o.then(l=>l?!0:(s(),!1)):o?!0:(s(),!1)})}refinement(t,n){return this._refinement((a,i)=>t(a)?!0:(i.addIssue(typeof n=="function"?n(a,i):n),!1))}_refinement(t){return new Dn({schema:this,typeName:W.ZodEffects,effect:{type:"refinement",refinement:t}})}superRefine(t){return this._refinement(t)}constructor(t){this.spa=this.safeParseAsync,this._def=t,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:n=>this["~validate"](n)}}optional(){return Rt.create(this,this._def)}nullable(){return Mn.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return wt.create(this)}promise(){return Gr.create(this,this._def)}or(t){return $r.create([this,t],this._def)}and(t){return Hr.create(this,t,this._def)}transform(t){return new Dn({...Y(this._def),schema:this,typeName:W.ZodEffects,effect:{type:"transform",transform:t}})}default(t){const n=typeof t=="function"?t:()=>t;return new Zr({...Y(this._def),innerType:this,defaultValue:n,typeName:W.ZodDefault})}brand(){return new Vp({typeName:W.ZodBranded,type:this,...Y(this._def)})}catch(t){const n=typeof t=="function"?t:()=>t;return new Yr({...Y(this._def),innerType:this,catchValue:n,typeName:W.ZodCatch})}describe(t){const n=this.constructor;return new n({...this._def,description:t})}pipe(t){return xd.create(this,t)}readonly(){return Kr.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}const vv=/^c[^\s-]{8,}$/i,bv=/^[0-9a-z]+$/,xv=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Sv=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,wv=/^[a-z0-9_-]{21}$/i,kv=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Cv=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,Pv=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,_v="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";let is;const jv=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Tv=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,Ev=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,Nv=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Av=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,Iv=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Bp="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",Lv=new RegExp(`^${Bp}$`);function $p(e){let t="[0-5]\\d";e.precision?t=`${t}\\.\\d{${e.precision}}`:e.precision==null&&(t=`${t}(\\.\\d+)?`);const n=e.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${t})${n}`}function qv(e){return new RegExp(`^${$p(e)}$`)}function Rv(e){let t=`${Bp}T${$p(e)}`;const n=[];return n.push(e.local?"Z?":"Z"),e.offset&&n.push("([+-]\\d{2}:?\\d{2})"),t=`${t}(${n.join("|")})`,new RegExp(`^${t}$`)}function Dv(e,t){return!!((t==="v4"||!t)&&jv.test(e)||(t==="v6"||!t)&&Ev.test(e))}function Mv(e,t){if(!kv.test(e))return!1;try{const[n]=e.split(".");if(!n)return!1;const a=n.replace(/-/g,"+").replace(/_/g,"/").padEnd(n.length+(4-n.length%4)%4,"="),i=JSON.parse(atob(a));return!(typeof i!="object"||i===null||"typ"in i&&(i==null?void 0:i.typ)!=="JWT"||!i.alg||t&&i.alg!==t)}catch{return!1}}function zv(e,t){return!!((t==="v4"||!t)&&Tv.test(e)||(t==="v6"||!t)&&Nv.test(e))}class Lt extends X{_parse(t){if(this._def.coerce&&(t.data=String(t.data)),this._getType(t)!==M.string){const r=this._getOrReturnCtx(t);return L(r,{code:T.invalid_type,expected:M.string,received:r.parsedType}),V}const a=new De;let i;for(const r of this._def.checks)if(r.kind==="min")t.data.lengthr.value&&(i=this._getOrReturnCtx(t,i),L(i,{code:T.too_big,maximum:r.value,type:"string",inclusive:!0,exact:!1,message:r.message}),a.dirty());else if(r.kind==="length"){const o=t.data.length>r.value,s=t.data.lengtht.test(i),{validation:n,code:T.invalid_string,...O.errToObj(a)})}_addCheck(t){return new Lt({...this._def,checks:[...this._def.checks,t]})}email(t){return this._addCheck({kind:"email",...O.errToObj(t)})}url(t){return this._addCheck({kind:"url",...O.errToObj(t)})}emoji(t){return this._addCheck({kind:"emoji",...O.errToObj(t)})}uuid(t){return this._addCheck({kind:"uuid",...O.errToObj(t)})}nanoid(t){return this._addCheck({kind:"nanoid",...O.errToObj(t)})}cuid(t){return this._addCheck({kind:"cuid",...O.errToObj(t)})}cuid2(t){return this._addCheck({kind:"cuid2",...O.errToObj(t)})}ulid(t){return this._addCheck({kind:"ulid",...O.errToObj(t)})}base64(t){return this._addCheck({kind:"base64",...O.errToObj(t)})}base64url(t){return this._addCheck({kind:"base64url",...O.errToObj(t)})}jwt(t){return this._addCheck({kind:"jwt",...O.errToObj(t)})}ip(t){return this._addCheck({kind:"ip",...O.errToObj(t)})}cidr(t){return this._addCheck({kind:"cidr",...O.errToObj(t)})}datetime(t){return typeof t=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:t}):this._addCheck({kind:"datetime",precision:typeof(t==null?void 0:t.precision)>"u"?null:t==null?void 0:t.precision,offset:(t==null?void 0:t.offset)??!1,local:(t==null?void 0:t.local)??!1,...O.errToObj(t==null?void 0:t.message)})}date(t){return this._addCheck({kind:"date",message:t})}time(t){return typeof t=="string"?this._addCheck({kind:"time",precision:null,message:t}):this._addCheck({kind:"time",precision:typeof(t==null?void 0:t.precision)>"u"?null:t==null?void 0:t.precision,...O.errToObj(t==null?void 0:t.message)})}duration(t){return this._addCheck({kind:"duration",...O.errToObj(t)})}regex(t,n){return this._addCheck({kind:"regex",regex:t,...O.errToObj(n)})}includes(t,n){return this._addCheck({kind:"includes",value:t,position:n==null?void 0:n.position,...O.errToObj(n==null?void 0:n.message)})}startsWith(t,n){return this._addCheck({kind:"startsWith",value:t,...O.errToObj(n)})}endsWith(t,n){return this._addCheck({kind:"endsWith",value:t,...O.errToObj(n)})}min(t,n){return this._addCheck({kind:"min",value:t,...O.errToObj(n)})}max(t,n){return this._addCheck({kind:"max",value:t,...O.errToObj(n)})}length(t,n){return this._addCheck({kind:"length",value:t,...O.errToObj(n)})}nonempty(t){return this.min(1,O.errToObj(t))}trim(){return new Lt({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new Lt({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new Lt({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(t=>t.kind==="datetime")}get isDate(){return!!this._def.checks.find(t=>t.kind==="date")}get isTime(){return!!this._def.checks.find(t=>t.kind==="time")}get isDuration(){return!!this._def.checks.find(t=>t.kind==="duration")}get isEmail(){return!!this._def.checks.find(t=>t.kind==="email")}get isURL(){return!!this._def.checks.find(t=>t.kind==="url")}get isEmoji(){return!!this._def.checks.find(t=>t.kind==="emoji")}get isUUID(){return!!this._def.checks.find(t=>t.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(t=>t.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(t=>t.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(t=>t.kind==="cuid2")}get isULID(){return!!this._def.checks.find(t=>t.kind==="ulid")}get isIP(){return!!this._def.checks.find(t=>t.kind==="ip")}get isCIDR(){return!!this._def.checks.find(t=>t.kind==="cidr")}get isBase64(){return!!this._def.checks.find(t=>t.kind==="base64")}get isBase64url(){return!!this._def.checks.find(t=>t.kind==="base64url")}get minLength(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxLength(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.valuenew Lt({checks:[],typeName:W.ZodString,coerce:(e==null?void 0:e.coerce)??!1,...Y(e)});function Uv(e,t){const n=(e.toString().split(".")[1]||"").length,a=(t.toString().split(".")[1]||"").length,i=n>a?n:a,r=Number.parseInt(e.toFixed(i).replace(".","")),o=Number.parseInt(t.toFixed(i).replace(".",""));return r%o/10**i}class xa extends X{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(t){if(this._def.coerce&&(t.data=Number(t.data)),this._getType(t)!==M.number){const r=this._getOrReturnCtx(t);return L(r,{code:T.invalid_type,expected:M.number,received:r.parsedType}),V}let a;const i=new De;for(const r of this._def.checks)r.kind==="int"?J.isInteger(t.data)||(a=this._getOrReturnCtx(t,a),L(a,{code:T.invalid_type,expected:"integer",received:"float",message:r.message}),i.dirty()):r.kind==="min"?(r.inclusive?t.datar.value:t.data>=r.value)&&(a=this._getOrReturnCtx(t,a),L(a,{code:T.too_big,maximum:r.value,type:"number",inclusive:r.inclusive,exact:!1,message:r.message}),i.dirty()):r.kind==="multipleOf"?Uv(t.data,r.value)!==0&&(a=this._getOrReturnCtx(t,a),L(a,{code:T.not_multiple_of,multipleOf:r.value,message:r.message}),i.dirty()):r.kind==="finite"?Number.isFinite(t.data)||(a=this._getOrReturnCtx(t,a),L(a,{code:T.not_finite,message:r.message}),i.dirty()):J.assertNever(r);return{status:i.value,value:t.data}}gte(t,n){return this.setLimit("min",t,!0,O.toString(n))}gt(t,n){return this.setLimit("min",t,!1,O.toString(n))}lte(t,n){return this.setLimit("max",t,!0,O.toString(n))}lt(t,n){return this.setLimit("max",t,!1,O.toString(n))}setLimit(t,n,a,i){return new xa({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:a,message:O.toString(i)}]})}_addCheck(t){return new xa({...this._def,checks:[...this._def.checks,t]})}int(t){return this._addCheck({kind:"int",message:O.toString(t)})}positive(t){return this._addCheck({kind:"min",value:0,inclusive:!1,message:O.toString(t)})}negative(t){return this._addCheck({kind:"max",value:0,inclusive:!1,message:O.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:0,inclusive:!0,message:O.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:0,inclusive:!0,message:O.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:O.toString(n)})}finite(t){return this._addCheck({kind:"finite",message:O.toString(t)})}safe(t){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:O.toString(t)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:O.toString(t)})}get minValue(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.valuet.kind==="int"||t.kind==="multipleOf"&&J.isInteger(t.value))}get isFinite(){let t=null,n=null;for(const a of this._def.checks){if(a.kind==="finite"||a.kind==="int"||a.kind==="multipleOf")return!0;a.kind==="min"?(n===null||a.value>n)&&(n=a.value):a.kind==="max"&&(t===null||a.valuenew xa({checks:[],typeName:W.ZodNumber,coerce:(e==null?void 0:e.coerce)||!1,...Y(e)});class Ci extends X{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(t){if(this._def.coerce)try{t.data=BigInt(t.data)}catch{return this._getInvalidInput(t)}if(this._getType(t)!==M.bigint)return this._getInvalidInput(t);let a;const i=new De;for(const r of this._def.checks)r.kind==="min"?(r.inclusive?t.datar.value:t.data>=r.value)&&(a=this._getOrReturnCtx(t,a),L(a,{code:T.too_big,type:"bigint",maximum:r.value,inclusive:r.inclusive,message:r.message}),i.dirty()):r.kind==="multipleOf"?t.data%r.value!==BigInt(0)&&(a=this._getOrReturnCtx(t,a),L(a,{code:T.not_multiple_of,multipleOf:r.value,message:r.message}),i.dirty()):J.assertNever(r);return{status:i.value,value:t.data}}_getInvalidInput(t){const n=this._getOrReturnCtx(t);return L(n,{code:T.invalid_type,expected:M.bigint,received:n.parsedType}),V}gte(t,n){return this.setLimit("min",t,!0,O.toString(n))}gt(t,n){return this.setLimit("min",t,!1,O.toString(n))}lte(t,n){return this.setLimit("max",t,!0,O.toString(n))}lt(t,n){return this.setLimit("max",t,!1,O.toString(n))}setLimit(t,n,a,i){return new Ci({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:a,message:O.toString(i)}]})}_addCheck(t){return new Ci({...this._def,checks:[...this._def.checks,t]})}positive(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:O.toString(t)})}negative(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:O.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:O.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:O.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:O.toString(n)})}get minValue(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.valuenew Ci({checks:[],typeName:W.ZodBigInt,coerce:(e==null?void 0:e.coerce)??!1,...Y(e)});class sl extends X{_parse(t){if(this._def.coerce&&(t.data=!!t.data),this._getType(t)!==M.boolean){const a=this._getOrReturnCtx(t);return L(a,{code:T.invalid_type,expected:M.boolean,received:a.parsedType}),V}return rt(t.data)}}sl.create=e=>new sl({typeName:W.ZodBoolean,coerce:(e==null?void 0:e.coerce)||!1,...Y(e)});class Fr extends X{_parse(t){if(this._def.coerce&&(t.data=new Date(t.data)),this._getType(t)!==M.date){const r=this._getOrReturnCtx(t);return L(r,{code:T.invalid_type,expected:M.date,received:r.parsedType}),V}if(Number.isNaN(t.data.getTime())){const r=this._getOrReturnCtx(t);return L(r,{code:T.invalid_date}),V}const a=new De;let i;for(const r of this._def.checks)r.kind==="min"?t.data.getTime()r.value&&(i=this._getOrReturnCtx(t,i),L(i,{code:T.too_big,message:r.message,inclusive:!0,exact:!1,maximum:r.value,type:"date"}),a.dirty()):J.assertNever(r);return{status:a.value,value:new Date(t.data.getTime())}}_addCheck(t){return new Fr({...this._def,checks:[...this._def.checks,t]})}min(t,n){return this._addCheck({kind:"min",value:t.getTime(),message:O.toString(n)})}max(t,n){return this._addCheck({kind:"max",value:t.getTime(),message:O.toString(n)})}get minDate(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t!=null?new Date(t):null}get maxDate(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.valuenew Fr({checks:[],coerce:(e==null?void 0:e.coerce)||!1,typeName:W.ZodDate,...Y(e)});class ac extends X{_parse(t){if(this._getType(t)!==M.symbol){const a=this._getOrReturnCtx(t);return L(a,{code:T.invalid_type,expected:M.symbol,received:a.parsedType}),V}return rt(t.data)}}ac.create=e=>new ac({typeName:W.ZodSymbol,...Y(e)});class ll extends X{_parse(t){if(this._getType(t)!==M.undefined){const a=this._getOrReturnCtx(t);return L(a,{code:T.invalid_type,expected:M.undefined,received:a.parsedType}),V}return rt(t.data)}}ll.create=e=>new ll({typeName:W.ZodUndefined,...Y(e)});class Br extends X{_parse(t){if(this._getType(t)!==M.null){const a=this._getOrReturnCtx(t);return L(a,{code:T.invalid_type,expected:M.null,received:a.parsedType}),V}return rt(t.data)}}Br.create=e=>new Br({typeName:W.ZodNull,...Y(e)});class ic extends X{constructor(){super(...arguments),this._any=!0}_parse(t){return rt(t.data)}}ic.create=e=>new ic({typeName:W.ZodAny,...Y(e)});class dl extends X{constructor(){super(...arguments),this._unknown=!0}_parse(t){return rt(t.data)}}dl.create=e=>new dl({typeName:W.ZodUnknown,...Y(e)});class un extends X{_parse(t){const n=this._getOrReturnCtx(t);return L(n,{code:T.invalid_type,expected:M.never,received:n.parsedType}),V}}un.create=e=>new un({typeName:W.ZodNever,...Y(e)});class rc extends X{_parse(t){if(this._getType(t)!==M.undefined){const a=this._getOrReturnCtx(t);return L(a,{code:T.invalid_type,expected:M.void,received:a.parsedType}),V}return rt(t.data)}}rc.create=e=>new rc({typeName:W.ZodVoid,...Y(e)});class wt extends X{_parse(t){const{ctx:n,status:a}=this._processInputParams(t),i=this._def;if(n.parsedType!==M.array)return L(n,{code:T.invalid_type,expected:M.array,received:n.parsedType}),V;if(i.exactLength!==null){const o=n.data.length>i.exactLength.value,s=n.data.lengthi.maxLength.value&&(L(n,{code:T.too_big,maximum:i.maxLength.value,type:"array",inclusive:!0,exact:!1,message:i.maxLength.message}),a.dirty()),n.common.async)return Promise.all([...n.data].map((o,s)=>i.type._parseAsync(new kt(n,o,n.path,s)))).then(o=>De.mergeArray(a,o));const r=[...n.data].map((o,s)=>i.type._parseSync(new kt(n,o,n.path,s)));return De.mergeArray(a,r)}get element(){return this._def.type}min(t,n){return new wt({...this._def,minLength:{value:t,message:O.toString(n)}})}max(t,n){return new wt({...this._def,maxLength:{value:t,message:O.toString(n)}})}length(t,n){return new wt({...this._def,exactLength:{value:t,message:O.toString(n)}})}nonempty(t){return this.min(1,t)}}wt.create=(e,t)=>new wt({type:e,minLength:null,maxLength:null,exactLength:null,typeName:W.ZodArray,...Y(t)});function Vn(e){if(e instanceof ye){const t={};for(const n in e.shape){const a=e.shape[n];t[n]=Rt.create(Vn(a))}return new ye({...e._def,shape:()=>t})}else return e instanceof wt?new wt({...e._def,type:Vn(e.element)}):e instanceof Rt?Rt.create(Vn(e.unwrap())):e instanceof Mn?Mn.create(Vn(e.unwrap())):e instanceof qn?qn.create(e.items.map(t=>Vn(t))):e}class ye extends X{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;const t=this._def.shape(),n=J.objectKeys(t);return this._cached={shape:t,keys:n},this._cached}_parse(t){if(this._getType(t)!==M.object){const u=this._getOrReturnCtx(t);return L(u,{code:T.invalid_type,expected:M.object,received:u.parsedType}),V}const{status:a,ctx:i}=this._processInputParams(t),{shape:r,keys:o}=this._getCached(),s=[];if(!(this._def.catchall instanceof un&&this._def.unknownKeys==="strip"))for(const u in i.data)o.includes(u)||s.push(u);const l=[];for(const u of o){const p=r[u],f=i.data[u];l.push({key:{status:"valid",value:u},value:p._parse(new kt(i,f,i.path,u)),alwaysSet:u in i.data})}if(this._def.catchall instanceof un){const u=this._def.unknownKeys;if(u==="passthrough")for(const p of s)l.push({key:{status:"valid",value:p},value:{status:"valid",value:i.data[p]}});else if(u==="strict")s.length>0&&(L(i,{code:T.unrecognized_keys,keys:s}),a.dirty());else if(u!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const u=this._def.catchall;for(const p of s){const f=i.data[p];l.push({key:{status:"valid",value:p},value:u._parse(new kt(i,f,i.path,p)),alwaysSet:p in i.data})}}return i.common.async?Promise.resolve().then(async()=>{const u=[];for(const p of l){const f=await p.key,h=await p.value;u.push({key:f,value:h,alwaysSet:p.alwaysSet})}return u}).then(u=>De.mergeObjectSync(a,u)):De.mergeObjectSync(a,l)}get shape(){return this._def.shape()}strict(t){return O.errToObj,new ye({...this._def,unknownKeys:"strict",...t!==void 0?{errorMap:(n,a)=>{var r,o;const i=((o=(r=this._def).errorMap)==null?void 0:o.call(r,n,a).message)??a.defaultError;return n.code==="unrecognized_keys"?{message:O.errToObj(t).message??i}:{message:i}}}:{}})}strip(){return new ye({...this._def,unknownKeys:"strip"})}passthrough(){return new ye({...this._def,unknownKeys:"passthrough"})}extend(t){return new ye({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new ye({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:W.ZodObject})}setKey(t,n){return this.augment({[t]:n})}catchall(t){return new ye({...this._def,catchall:t})}pick(t){const n={};for(const a of J.objectKeys(t))t[a]&&this.shape[a]&&(n[a]=this.shape[a]);return new ye({...this._def,shape:()=>n})}omit(t){const n={};for(const a of J.objectKeys(this.shape))t[a]||(n[a]=this.shape[a]);return new ye({...this._def,shape:()=>n})}deepPartial(){return Vn(this)}partial(t){const n={};for(const a of J.objectKeys(this.shape)){const i=this.shape[a];t&&!t[a]?n[a]=i:n[a]=i.optional()}return new ye({...this._def,shape:()=>n})}required(t){const n={};for(const a of J.objectKeys(this.shape))if(t&&!t[a])n[a]=this.shape[a];else{let r=this.shape[a];for(;r instanceof Rt;)r=r._def.innerType;n[a]=r}return new ye({...this._def,shape:()=>n})}keyof(){return Hp(J.objectKeys(this.shape))}}ye.create=(e,t)=>new ye({shape:()=>e,unknownKeys:"strip",catchall:un.create(),typeName:W.ZodObject,...Y(t)});ye.strictCreate=(e,t)=>new ye({shape:()=>e,unknownKeys:"strict",catchall:un.create(),typeName:W.ZodObject,...Y(t)});ye.lazycreate=(e,t)=>new ye({shape:e,unknownKeys:"strip",catchall:un.create(),typeName:W.ZodObject,...Y(t)});class $r extends X{_parse(t){const{ctx:n}=this._processInputParams(t),a=this._def.options;function i(r){for(const s of r)if(s.result.status==="valid")return s.result;for(const s of r)if(s.result.status==="dirty")return n.common.issues.push(...s.ctx.common.issues),s.result;const o=r.map(s=>new Ot(s.ctx.common.issues));return L(n,{code:T.invalid_union,unionErrors:o}),V}if(n.common.async)return Promise.all(a.map(async r=>{const o={...n,common:{...n.common,issues:[]},parent:null};return{result:await r._parseAsync({data:n.data,path:n.path,parent:o}),ctx:o}})).then(i);{let r;const o=[];for(const l of a){const u={...n,common:{...n.common,issues:[]},parent:null},p=l._parseSync({data:n.data,path:n.path,parent:u});if(p.status==="valid")return p;p.status==="dirty"&&!r&&(r={result:p,ctx:u}),u.common.issues.length&&o.push(u.common.issues)}if(r)return n.common.issues.push(...r.ctx.common.issues),r.result;const s=o.map(l=>new Ot(l));return L(n,{code:T.invalid_union,unionErrors:s}),V}}get options(){return this._def.options}}$r.create=(e,t)=>new $r({options:e,typeName:W.ZodUnion,...Y(t)});const Tt=e=>e instanceof Wr?Tt(e.schema):e instanceof Dn?Tt(e.innerType()):e instanceof Qr?[e.value]:e instanceof Rn?e.options:e instanceof cl?J.objectValues(e.enum):e instanceof Zr?Tt(e._def.innerType):e instanceof ll?[void 0]:e instanceof Br?[null]:e instanceof Rt?[void 0,...Tt(e.unwrap())]:e instanceof Mn?[null,...Tt(e.unwrap())]:e instanceof Vp||e instanceof Kr?Tt(e.unwrap()):e instanceof Yr?Tt(e._def.innerType):[];class bd extends X{_parse(t){const{ctx:n}=this._processInputParams(t);if(n.parsedType!==M.object)return L(n,{code:T.invalid_type,expected:M.object,received:n.parsedType}),V;const a=this.discriminator,i=n.data[a],r=this.optionsMap.get(i);return r?n.common.async?r._parseAsync({data:n.data,path:n.path,parent:n}):r._parseSync({data:n.data,path:n.path,parent:n}):(L(n,{code:T.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[a]}),V)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,n,a){const i=new Map;for(const r of n){const o=Tt(r.shape[t]);if(!o.length)throw new Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(const s of o){if(i.has(s))throw new Error(`Discriminator property ${String(t)} has duplicate value ${String(s)}`);i.set(s,r)}}return new bd({typeName:W.ZodDiscriminatedUnion,discriminator:t,options:n,optionsMap:i,...Y(a)})}}function ul(e,t){const n=Wt(e),a=Wt(t);if(e===t)return{valid:!0,data:e};if(n===M.object&&a===M.object){const i=J.objectKeys(t),r=J.objectKeys(e).filter(s=>i.indexOf(s)!==-1),o={...e,...t};for(const s of r){const l=ul(e[s],t[s]);if(!l.valid)return{valid:!1};o[s]=l.data}return{valid:!0,data:o}}else if(n===M.array&&a===M.array){if(e.length!==t.length)return{valid:!1};const i=[];for(let r=0;r{if(ec(r)||ec(o))return V;const s=ul(r.value,o.value);return s.valid?((tc(r)||tc(o))&&n.dirty(),{status:n.value,value:s.data}):(L(a,{code:T.invalid_intersection_types}),V)};return a.common.async?Promise.all([this._def.left._parseAsync({data:a.data,path:a.path,parent:a}),this._def.right._parseAsync({data:a.data,path:a.path,parent:a})]).then(([r,o])=>i(r,o)):i(this._def.left._parseSync({data:a.data,path:a.path,parent:a}),this._def.right._parseSync({data:a.data,path:a.path,parent:a}))}}Hr.create=(e,t,n)=>new Hr({left:e,right:t,typeName:W.ZodIntersection,...Y(n)});class qn extends X{_parse(t){const{status:n,ctx:a}=this._processInputParams(t);if(a.parsedType!==M.array)return L(a,{code:T.invalid_type,expected:M.array,received:a.parsedType}),V;if(a.data.lengththis._def.items.length&&(L(a,{code:T.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),n.dirty());const r=[...a.data].map((o,s)=>{const l=this._def.items[s]||this._def.rest;return l?l._parse(new kt(a,o,a.path,s)):null}).filter(o=>!!o);return a.common.async?Promise.all(r).then(o=>De.mergeArray(n,o)):De.mergeArray(n,r)}get items(){return this._def.items}rest(t){return new qn({...this._def,rest:t})}}qn.create=(e,t)=>{if(!Array.isArray(e))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new qn({items:e,typeName:W.ZodTuple,rest:null,...Y(t)})};class Vr extends X{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){const{status:n,ctx:a}=this._processInputParams(t);if(a.parsedType!==M.object)return L(a,{code:T.invalid_type,expected:M.object,received:a.parsedType}),V;const i=[],r=this._def.keyType,o=this._def.valueType;for(const s in a.data)i.push({key:r._parse(new kt(a,s,a.path,s)),value:o._parse(new kt(a,a.data[s],a.path,s)),alwaysSet:s in a.data});return a.common.async?De.mergeObjectAsync(n,i):De.mergeObjectSync(n,i)}get element(){return this._def.valueType}static create(t,n,a){return n instanceof X?new Vr({keyType:t,valueType:n,typeName:W.ZodRecord,...Y(a)}):new Vr({keyType:Lt.create(),valueType:t,typeName:W.ZodRecord,...Y(n)})}}class oc extends X{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){const{status:n,ctx:a}=this._processInputParams(t);if(a.parsedType!==M.map)return L(a,{code:T.invalid_type,expected:M.map,received:a.parsedType}),V;const i=this._def.keyType,r=this._def.valueType,o=[...a.data.entries()].map(([s,l],u)=>({key:i._parse(new kt(a,s,a.path,[u,"key"])),value:r._parse(new kt(a,l,a.path,[u,"value"]))}));if(a.common.async){const s=new Map;return Promise.resolve().then(async()=>{for(const l of o){const u=await l.key,p=await l.value;if(u.status==="aborted"||p.status==="aborted")return V;(u.status==="dirty"||p.status==="dirty")&&n.dirty(),s.set(u.value,p.value)}return{status:n.value,value:s}})}else{const s=new Map;for(const l of o){const u=l.key,p=l.value;if(u.status==="aborted"||p.status==="aborted")return V;(u.status==="dirty"||p.status==="dirty")&&n.dirty(),s.set(u.value,p.value)}return{status:n.value,value:s}}}}oc.create=(e,t,n)=>new oc({valueType:t,keyType:e,typeName:W.ZodMap,...Y(n)});class Pi extends X{_parse(t){const{status:n,ctx:a}=this._processInputParams(t);if(a.parsedType!==M.set)return L(a,{code:T.invalid_type,expected:M.set,received:a.parsedType}),V;const i=this._def;i.minSize!==null&&a.data.sizei.maxSize.value&&(L(a,{code:T.too_big,maximum:i.maxSize.value,type:"set",inclusive:!0,exact:!1,message:i.maxSize.message}),n.dirty());const r=this._def.valueType;function o(l){const u=new Set;for(const p of l){if(p.status==="aborted")return V;p.status==="dirty"&&n.dirty(),u.add(p.value)}return{status:n.value,value:u}}const s=[...a.data.values()].map((l,u)=>r._parse(new kt(a,l,a.path,u)));return a.common.async?Promise.all(s).then(l=>o(l)):o(s)}min(t,n){return new Pi({...this._def,minSize:{value:t,message:O.toString(n)}})}max(t,n){return new Pi({...this._def,maxSize:{value:t,message:O.toString(n)}})}size(t,n){return this.min(t,n).max(t,n)}nonempty(t){return this.min(1,t)}}Pi.create=(e,t)=>new Pi({valueType:e,minSize:null,maxSize:null,typeName:W.ZodSet,...Y(t)});class Wr extends X{get schema(){return this._def.getter()}_parse(t){const{ctx:n}=this._processInputParams(t);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}}Wr.create=(e,t)=>new Wr({getter:e,typeName:W.ZodLazy,...Y(t)});class Qr extends X{_parse(t){if(t.data!==this._def.value){const n=this._getOrReturnCtx(t);return L(n,{received:n.data,code:T.invalid_literal,expected:this._def.value}),V}return{status:"valid",value:t.data}}get value(){return this._def.value}}Qr.create=(e,t)=>new Qr({value:e,typeName:W.ZodLiteral,...Y(t)});function Hp(e,t){return new Rn({values:e,typeName:W.ZodEnum,...Y(t)})}class Rn extends X{_parse(t){if(typeof t.data!="string"){const n=this._getOrReturnCtx(t),a=this._def.values;return L(n,{expected:J.joinValues(a),received:n.parsedType,code:T.invalid_type}),V}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(t.data)){const n=this._getOrReturnCtx(t),a=this._def.values;return L(n,{received:n.data,code:T.invalid_enum_value,options:a}),V}return rt(t.data)}get options(){return this._def.values}get enum(){const t={};for(const n of this._def.values)t[n]=n;return t}get Values(){const t={};for(const n of this._def.values)t[n]=n;return t}get Enum(){const t={};for(const n of this._def.values)t[n]=n;return t}extract(t,n=this._def){return Rn.create(t,{...this._def,...n})}exclude(t,n=this._def){return Rn.create(this.options.filter(a=>!t.includes(a)),{...this._def,...n})}}Rn.create=Hp;class cl extends X{_parse(t){const n=J.getValidEnumValues(this._def.values),a=this._getOrReturnCtx(t);if(a.parsedType!==M.string&&a.parsedType!==M.number){const i=J.objectValues(n);return L(a,{expected:J.joinValues(i),received:a.parsedType,code:T.invalid_type}),V}if(this._cache||(this._cache=new Set(J.getValidEnumValues(this._def.values))),!this._cache.has(t.data)){const i=J.objectValues(n);return L(a,{received:a.data,code:T.invalid_enum_value,options:i}),V}return rt(t.data)}get enum(){return this._def.values}}cl.create=(e,t)=>new cl({values:e,typeName:W.ZodNativeEnum,...Y(t)});class Gr extends X{unwrap(){return this._def.type}_parse(t){const{ctx:n}=this._processInputParams(t);if(n.parsedType!==M.promise&&n.common.async===!1)return L(n,{code:T.invalid_type,expected:M.promise,received:n.parsedType}),V;const a=n.parsedType===M.promise?n.data:Promise.resolve(n.data);return rt(a.then(i=>this._def.type.parseAsync(i,{path:n.path,errorMap:n.common.contextualErrorMap})))}}Gr.create=(e,t)=>new Gr({type:e,typeName:W.ZodPromise,...Y(t)});class Dn extends X{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===W.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(t){const{status:n,ctx:a}=this._processInputParams(t),i=this._def.effect||null,r={addIssue:o=>{L(a,o),o.fatal?n.abort():n.dirty()},get path(){return a.path}};if(r.addIssue=r.addIssue.bind(r),i.type==="preprocess"){const o=i.transform(a.data,r);if(a.common.async)return Promise.resolve(o).then(async s=>{if(n.value==="aborted")return V;const l=await this._def.schema._parseAsync({data:s,path:a.path,parent:a});return l.status==="aborted"?V:l.status==="dirty"||n.value==="dirty"?Ga(l.value):l});{if(n.value==="aborted")return V;const s=this._def.schema._parseSync({data:o,path:a.path,parent:a});return s.status==="aborted"?V:s.status==="dirty"||n.value==="dirty"?Ga(s.value):s}}if(i.type==="refinement"){const o=s=>{const l=i.refinement(s,r);if(a.common.async)return Promise.resolve(l);if(l instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return s};if(a.common.async===!1){const s=this._def.schema._parseSync({data:a.data,path:a.path,parent:a});return s.status==="aborted"?V:(s.status==="dirty"&&n.dirty(),o(s.value),{status:n.value,value:s.value})}else return this._def.schema._parseAsync({data:a.data,path:a.path,parent:a}).then(s=>s.status==="aborted"?V:(s.status==="dirty"&&n.dirty(),o(s.value).then(()=>({status:n.value,value:s.value}))))}if(i.type==="transform")if(a.common.async===!1){const o=this._def.schema._parseSync({data:a.data,path:a.path,parent:a});if(!ba(o))return V;const s=i.transform(o.value,r);if(s instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:n.value,value:s}}else return this._def.schema._parseAsync({data:a.data,path:a.path,parent:a}).then(o=>ba(o)?Promise.resolve(i.transform(o.value,r)).then(s=>({status:n.value,value:s})):V);J.assertNever(i)}}Dn.create=(e,t,n)=>new Dn({schema:e,typeName:W.ZodEffects,effect:t,...Y(n)});Dn.createWithPreprocess=(e,t,n)=>new Dn({schema:t,effect:{type:"preprocess",transform:e},typeName:W.ZodEffects,...Y(n)});class Rt extends X{_parse(t){return this._getType(t)===M.undefined?rt(void 0):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}}Rt.create=(e,t)=>new Rt({innerType:e,typeName:W.ZodOptional,...Y(t)});class Mn extends X{_parse(t){return this._getType(t)===M.null?rt(null):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}}Mn.create=(e,t)=>new Mn({innerType:e,typeName:W.ZodNullable,...Y(t)});class Zr extends X{_parse(t){const{ctx:n}=this._processInputParams(t);let a=n.data;return n.parsedType===M.undefined&&(a=this._def.defaultValue()),this._def.innerType._parse({data:a,path:n.path,parent:n})}removeDefault(){return this._def.innerType}}Zr.create=(e,t)=>new Zr({innerType:e,typeName:W.ZodDefault,defaultValue:typeof t.default=="function"?t.default:()=>t.default,...Y(t)});class Yr extends X{_parse(t){const{ctx:n}=this._processInputParams(t),a={...n,common:{...n.common,issues:[]}},i=this._def.innerType._parse({data:a.data,path:a.path,parent:{...a}});return Or(i)?i.then(r=>({status:"valid",value:r.status==="valid"?r.value:this._def.catchValue({get error(){return new Ot(a.common.issues)},input:a.data})})):{status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new Ot(a.common.issues)},input:a.data})}}removeCatch(){return this._def.innerType}}Yr.create=(e,t)=>new Yr({innerType:e,typeName:W.ZodCatch,catchValue:typeof t.catch=="function"?t.catch:()=>t.catch,...Y(t)});class sc extends X{_parse(t){if(this._getType(t)!==M.nan){const a=this._getOrReturnCtx(t);return L(a,{code:T.invalid_type,expected:M.nan,received:a.parsedType}),V}return{status:"valid",value:t.data}}}sc.create=e=>new sc({typeName:W.ZodNaN,...Y(e)});class Vp extends X{_parse(t){const{ctx:n}=this._processInputParams(t),a=n.data;return this._def.type._parse({data:a,path:n.path,parent:n})}unwrap(){return this._def.type}}class xd extends X{_parse(t){const{status:n,ctx:a}=this._processInputParams(t);if(a.common.async)return(async()=>{const r=await this._def.in._parseAsync({data:a.data,path:a.path,parent:a});return r.status==="aborted"?V:r.status==="dirty"?(n.dirty(),Ga(r.value)):this._def.out._parseAsync({data:r.value,path:a.path,parent:a})})();{const i=this._def.in._parseSync({data:a.data,path:a.path,parent:a});return i.status==="aborted"?V:i.status==="dirty"?(n.dirty(),{status:"dirty",value:i.value}):this._def.out._parseSync({data:i.value,path:a.path,parent:a})}}static create(t,n){return new xd({in:t,out:n,typeName:W.ZodPipeline})}}class Kr extends X{_parse(t){const n=this._def.innerType._parse(t),a=i=>(ba(i)&&(i.value=Object.freeze(i.value)),i);return Or(n)?n.then(i=>a(i)):a(n)}unwrap(){return this._def.innerType}}Kr.create=(e,t)=>new Kr({innerType:e,typeName:W.ZodReadonly,...Y(t)});var W;(function(e){e.ZodString="ZodString",e.ZodNumber="ZodNumber",e.ZodNaN="ZodNaN",e.ZodBigInt="ZodBigInt",e.ZodBoolean="ZodBoolean",e.ZodDate="ZodDate",e.ZodSymbol="ZodSymbol",e.ZodUndefined="ZodUndefined",e.ZodNull="ZodNull",e.ZodAny="ZodAny",e.ZodUnknown="ZodUnknown",e.ZodNever="ZodNever",e.ZodVoid="ZodVoid",e.ZodArray="ZodArray",e.ZodObject="ZodObject",e.ZodUnion="ZodUnion",e.ZodDiscriminatedUnion="ZodDiscriminatedUnion",e.ZodIntersection="ZodIntersection",e.ZodTuple="ZodTuple",e.ZodRecord="ZodRecord",e.ZodMap="ZodMap",e.ZodSet="ZodSet",e.ZodFunction="ZodFunction",e.ZodLazy="ZodLazy",e.ZodLiteral="ZodLiteral",e.ZodEnum="ZodEnum",e.ZodEffects="ZodEffects",e.ZodNativeEnum="ZodNativeEnum",e.ZodOptional="ZodOptional",e.ZodNullable="ZodNullable",e.ZodDefault="ZodDefault",e.ZodCatch="ZodCatch",e.ZodPromise="ZodPromise",e.ZodBranded="ZodBranded",e.ZodPipeline="ZodPipeline",e.ZodReadonly="ZodReadonly"})(W||(W={}));const c=Lt.create,A=xa.create,Q=sl.create,Ov=Br.create,gn=dl.create;un.create;const B=wt.create,w=ye.create,Sd=$r.create,Fv=bd.create;Hr.create;qn.create;const gt=Vr.create,Bv=Wr.create,ct=Qr.create,$=Rn.create;Gr.create;Rt.create;Mn.create;c().uuid();const Wp=c().min(1).max(80).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/,"Must be a lowercase, hyphen-separated slug"),$v=["admin","api","app","assets","auth","billing","cdn","dashboard","docs","help","i","internal","login","mail","public","static","status","support","system","tenant","vendrae","www"],Hv=new Set($v);function wd(e){return Hv.has(e.trim().toLowerCase())}const Vv=3,Wv=40,Qv=/^[a-z0-9](?:[a-z0-9-]{1,38}[a-z0-9])?$/,Gv=c().trim().min(Vv).max(Wv).regex(Qv,"Must be a lowercase, hyphen-separated slug (3–40 chars).").refine(e=>!wd(e),{message:"This subdomain is reserved."});w({slug:c(),available:Q(),reason:$(["invalid","reserved","taken"]).optional()});function Zv(e,t){if(!e||!t)return!1;const n=e.toLowerCase(),a=t.toLowerCase();return n===`tenant.${a}`}function Yv(e,t){const n=Qp(e.pathname);if(t.mode==="legacy")return n;const a=Kv(e.hostname,t.appBaseDomain);return a||(Zv(e.hostname,t.appBaseDomain)?n:null)}function Qp(e){const t=/^\/t\/([a-z0-9](?:[a-z0-9-]{1,38}[a-z0-9])?)(?:\/|$)/.exec(e);return(t==null?void 0:t[1])??null}function Kv(e,t){if(!e||!t)return null;const n=e.toLowerCase(),a=t.toLowerCase();if(n===a)return null;const i=`.${a}`;if(!n.endsWith(i))return null;const r=n.slice(0,-i.length);return!r||r.includes(".")||wd(r)||!/^[a-z0-9](?:[a-z0-9-]{1,38}[a-z0-9])?$/.test(r)?null:r}function Xv(e,t){if(!e||!t)return!1;const n=e.toLowerCase(),a=t.toLowerCase(),i=`.${a}`;if(n===a)return!0;if(!n.endsWith(i))return!1;const r=n.slice(0,-i.length);return wd(r)}const Jv=["inherit","enabled","disabled"];w({tenantSubdomain:$(Jv).optional()});const eb=["system_admin","business_owner","tenant_admin","sales_rep"],tb=$(eb),nb=["active","suspended","archived"];$(nb);const ab=["active","disabled"],ib=$(ab),rb=["active","invited","disabled"];$(rb);const ob=["product","service","package"],wo=$(ob),sb=["single","multi","boolean"],lb=$(sb),db=["single_choice","multiple_choice","boolean","quantity","number","text","textarea","file_upload","info"],ub=$(db),cb=["none","per_unit","tiered"],mb=$(cb),Gp=["slate","gray","zinc","blue","sky","cyan","teal","green","emerald","lime","yellow","amber","orange","red","rose","pink","fuchsia","purple","violet","indigo"];$(Gp);const ko=c().trim().min(1).max(64),pb=["public","admin"],fb=$(pb),gb=["draft","sent","finalized","superseded"],hb=$(gb),yb=["system","tenant_edit","finalization"],vb=$(yb),bb=["pedido_revision_created","item_price_overridden","discount_applied","charge_added","proposal_sent","pedido_finalized","manual_line_item_added","line_item_removed","manual_pedido_created","pedido_deleted","status_override","customer_updated"];$(bb);const xb=["trialing","active","past_due","cancelled","expired"];$(xb);c().length(3).toUpperCase().default("USD");function _e(e){return Math.round((e+Number.EPSILON)*100)/100}function Sb(e){return _e(e.reduce((t,n)=>t+n,0))}function Fe(e,t="USD"){return`${t} ${_e(e).toFixed(2)}`}A().finite().nonnegative().transform(e=>_e(e));const dr="#111827",lc="#ffffff";function Xr(e){const t=(e??"").trim().replace(/^#/,""),n=i=>i.split("").map(r=>r+r).join("");let a;if(/^[0-9a-fA-F]{3}$/.test(t))a=n(t)+"ff";else if(/^[0-9a-fA-F]{4}$/.test(t))a=n(t);else if(/^[0-9a-fA-F]{6}$/.test(t))a=t+"ff";else if(/^[0-9a-fA-F]{8}$/.test(t))a=t;else return null;return{r:parseInt(a.slice(0,2),16),g:parseInt(a.slice(2,4),16),b:parseInt(a.slice(4,6),16),a:parseInt(a.slice(6,8),16)/255}}function ml(e,t,n){const a=i=>{const r=i/255;return r<=.03928?r/12.92:Math.pow((r+.055)/1.055,2.4)};return .2126*a(e)+.7152*a(t)+.0722*a(n)}function pl(e,t={r:255,g:255,b:255}){return{r:Math.round(e.r*e.a+t.r*(1-e.a)),g:Math.round(e.g*e.a+t.g*(1-e.a)),b:Math.round(e.b*e.a+t.b*(1-e.a))}}function wb(e,t,n){const a=i=>Math.max(0,Math.min(255,Math.round(i))).toString(16).padStart(2,"0");return`#${a(e)}${a(t)}${a(n)}`}function kb(e,t,n){const a=e/255,i=t/255,r=n/255,o=Math.max(a,i,r),s=Math.min(a,i,r),l=(o+s)/2;let u=0,p=0;if(o!==s){const f=o-s;p=l>.5?f/(2-o-s):f/(o+s),o===a?u=(i-r)/f+(i{let s=o;return s<0&&(s+=1),s>1&&(s-=1),s<1/6?r+(i-r)*6*s:s<1/2?i:s<2/3?r+(i-r)*(2/3-s)*6:r},i=n<.5?n*(1+t):n+t-n*t,r=2*n-i;return{r:a(e+1/3)*255,g:a(e)*255,b:a(e-1/3)*255}}function Pb(e,t,n={r:255,g:255,b:255}){const a=Xr(e),i=Xr(t);if(!a||!i)return 1;const r=pl(a,n),o=pl(i,n),s=ml(r.r,r.g,r.b),l=ml(o.r,o.g,o.b),u=Math.max(s,l),p=Math.min(s,l);return(u+.05)/(p+.05)}function _b(e,t="#ffffff",n=4.5){const a=Xr(e);if(!a)return dr;const i=pl(a);let{h:r,s:o,l:s}=kb(i.r,i.g,i.b);for(let l=0;l<100;l+=1){const{r:u,g:p,b:f}=Cb(r,o,s),h=wb(u,p,f);if(Pb(h,t)>=n)return h;if(s-=.02,s<=0)return dr}return dr}function dc(e,t={r:255,g:255,b:255}){const n=Xr(e);if(!n)return lc;const a=Math.round(n.r*n.a+t.r*(1-n.a)),i=Math.round(n.g*n.a+t.g*(1-n.a)),r=Math.round(n.b*n.a+t.b*(1-n.a)),o=ml(a,i,r),s=1.05/(o+.05);return(o+.05)/.05>=s?dr:lc}const jb=["VALIDATION_ERROR","UNAUTHORIZED","FORBIDDEN","NOT_FOUND","CONFLICT","TENANT_NOT_FOUND","TENANT_MEMBERSHIP_REQUIRED","TENANT_INACTIVE","QUOTE_CALCULATION_FAILED","GONE","INTERNAL_ERROR"];w({error:w({code:$(jb),message:c(),details:B(gn()).default([])})});const Tb=$(["eq","neq","in","gt","gte","lt","lte","exists"]),Zp=w({path:c().min(1),op:Tb,value:gn().optional()}),ii=Bv(()=>Sd([w({all:B(ii)}),w({any:B(ii)}),w({not:ii}),Zp])),Yp=Fv("type",[w({type:ct("add_fixed"),amount:A(),label:c()}),w({type:ct("subtract_fixed"),amount:A(),label:c()}),w({type:ct("multiply_total"),factor:A(),label:c()}),w({type:ct("set_option_price"),optionKey:c(),amount:A(),label:c()})]),kd=w({id:c(),name:c(),priority:A().int(),active:Q(),conditions:ii,effects:B(Yp)}),Co=Sd([c(),B(c()),Q(),A(),Ov()]);w({tenantId:c().uuid().optional(),catalogItemId:c().uuid().optional(),quantity:A().int().positive().default(1),selections:gt(Co)});const Eb=$(["base_price","option","rule","tax","discount"]),Kp=w({label:c(),amount:A(),source:Eb}),Xp=w({groupKey:c(),optionKey:c(),label:c(),priceDelta:A()}),Nb=w({ruleId:c(),name:c(),effects:B(Yp)});w({currency:c(),subtotal:A(),discount:A(),tax:A(),total:A(),lines:B(Kp),selectedOptionsSnapshot:B(Xp),appliedRules:B(Nb)});const Ab=w({when:Zp,imageUrl:c()}),Jp=w({defaultImageUrl:c().nullable().optional(),conditionalImages:B(Ab).default([])}),Ib=w({id:c().optional(),key:c().min(1),label:c().min(1),description:c().nullable().optional(),priceAdjustment:A().default(0),imageUrl:c().nullable().optional(),available:Q().default(!0),order:A().int().default(0)}),Lb=w({required:Q().optional(),min:A().optional(),max:A().optional(),step:A().positive().optional(),minLength:A().int().nonnegative().optional(),maxLength:A().int().positive().optional(),minSelections:A().int().nonnegative().optional(),maxSelections:A().int().positive().optional(),message:c().optional()}).default({}),qb=w({minQuantity:A().nonnegative(),unitPrice:A()}),Rb=w({mode:mb.default("none"),unitPrice:A().optional(),tiers:B(qb).default([])}).default({mode:"none",tiers:[]}),Db=w({id:c().optional(),key:c().min(1),label:c().min(1),description:c().nullable().optional(),helperText:c().nullable().optional(),placeholder:c().nullable().optional(),type:ub,order:A().int().default(0),defaultValue:gn().optional(),unitLabel:c().nullable().optional(),trueLabel:c().nullable().optional(),falseLabel:c().nullable().optional(),priceWhenTrue:A().optional(),imageWhenTrue:c().nullable().optional(),infoText:c().nullable().optional(),options:B(Ib).default([]),validation:Lb,pricing:Rb,visibilityCondition:ii.nullable().optional(),affectsMessage:Q().optional()}),Mb=w({id:c().optional(),key:c().min(1),title:c().min(1),description:c().nullable().optional(),order:A().int().default(0),collapsible:Q().default(!1),fields:B(Db).default([])}),zb=w({intro:c().nullable().optional(),outro:c().nullable().optional(),includePriceBreakdown:Q().default(!0),useLabelsOnly:Q().default(!0)}).default({includePriceBreakdown:!0,useLabelsOnly:!0}),Ub=w({question:c(),answer:c()}),Ob=w({displayTitle:c().nullable().optional(),displaySubtitle:c().nullable().optional(),instructions:c().nullable().optional(),badge:c().nullable().optional(),defaultImageUrl:c().nullable().optional(),gallery:B(c()).default([]),benefits:B(c()).default([]),included:B(c()).default([]),notIncluded:B(c()).default([]),deliveryTime:c().nullable().optional(),details:c().nullable().optional(),faqs:B(Ub).default([])}).default({gallery:[]}),Fb=w({name:c().optional(),description:c().nullable().optional(),basePrice:A().optional(),currency:c().optional(),itemType:wo.optional()}).optional(),Cd=w({groups:B(Mb).default([]),pricingRules:B(kd).default([]),message:zb,presentation:Ob,basics:Fb}),Bb=w({id:c().uuid().optional(),key:c().min(1),label:c().min(1),priceDelta:A().default(0),imageUrl:c().nullable().optional(),displayOrder:A().int().default(0),active:Q().default(!0),metadata:gt(gn()).default({})}),ef=w({id:c().uuid().optional(),key:c().min(1),name:c().min(1),selectionType:lb,required:Q().default(!1),displayOrder:A().int().default(0),options:B(Bb).default([])}),$b=w({id:c().uuid(),tenantId:c().uuid(),itemType:wo,name:c().min(1),slug:Wp,description:c().nullable().optional(),basePrice:A().nonnegative(),currency:c(),active:Q(),imageConfig:Jp,optionGroups:B(ef),pricingRules:B(kd),customization:Cd.optional()}),Pd=$(["available","under_request","custom_made","limited"]);w({id:c().uuid(),name:c(),slug:c(),itemType:wo,basePrice:A(),currency:c(),active:Q(),updatedAt:c().optional(),category:c().nullable().default(null),badge:c().nullable().default(null),coverImageUrl:c().nullable().default(null),shortDescription:c().nullable().default(null),featured:Q().default(!1),displayOrder:A().int().default(0),availabilityStatus:Pd.default("available"),deletedAt:c().nullable().optional(),isDraft:Q().optional()});w({category:c().max(80).nullable().optional(),badge:c().max(40).nullable().optional(),coverImageUrl:c().url().nullable().optional(),shortDescription:c().max(280).nullable().optional(),featured:Q().optional(),displayOrder:A().int().optional(),availabilityStatus:Pd.optional()});w({itemType:wo.default("product"),name:c().min(1),slug:Wp,description:c().nullable().optional(),basePrice:A().nonnegative().default(0),currency:c().default("USD"),active:Q().default(!0),imageConfig:Jp.optional(),optionGroups:B(ef).optional(),pricingRules:B(kd).optional(),customization:Cd.optional()});w({item:$b,published:Q(),hasUnpublishedChanges:Q()});const uc=$(["catalog","whatsapp"]),ia=c().regex(/^#[0-9a-fA-F]{6}$/,"Color hex inválido"),_d=w({mode:$(["auto","single","custom"]).default("auto"),singleColor:ia.optional(),titleColor:ia.optional(),subtitleColor:ia.optional(),descriptionColor:ia.optional()}).default({mode:"auto"}),Hb=w({title:c().default(""),subtitle:c().default(""),description:c().default(""),imageUrl:c().nullable().default(null),primaryCtaLabel:c().default(""),primaryCtaTarget:uc.default("catalog"),secondaryCtaLabel:c().default(""),secondaryCtaTarget:uc.default("whatsapp"),textColors:_d}),Vb=w({visible:Q().default(!0),heading:c().default(""),subheading:c().default(""),mode:$(["auto","manual"]).default("auto"),itemSlugs:B(c()).default([]),limit:A().int().min(1).max(12).default(3)}),Wb=w({title:c().default(""),description:c().default("")}),Qb=w({visible:Q().default(!0),heading:c().default(""),steps:B(Wb).default([])}),Gb=w({title:c().default(""),description:c().default(""),icon:c().default("check")}),Zb=w({visible:Q().default(!0),heading:c().default(""),items:B(Gb).default([])}),Yb=w({name:c().default(""),comment:c().default(""),avatarUrl:c().nullable().default(null)}),Kb=w({visible:Q().default(!0),heading:c().default(""),items:B(Yb).default([])}),Xb=w({question:c().default(""),answer:c().default("")}),Jb=w({visible:Q().default(!0),heading:c().default(""),items:B(Xb).default([])}),e0=w({visible:Q().default(!0),tagline:c().default(""),whatsapp:c().default(""),instagram:c().default(""),email:c().default(""),address:c().default(""),hours:c().default(""),backgroundColor:ia.optional(),textColor:ia.optional(),logoMode:$(["business","custom","text"]).default("business"),customLogoAssetId:c().uuid().optional(),customLogoUrl:c().url().optional(),showContactInfo:Q().default(!0),showSocialLinks:Q().default(!0)});function rs(e,t){return!t||t.mode==="auto"?"var(--brand-on-primary)":t.mode==="single"?t.singleColor??"var(--brand-on-primary)":e==="title"?t.titleColor??"var(--brand-on-primary)":e==="subtitle"?t.subtitleColor??"var(--brand-on-primary)":t.descriptionColor??"var(--brand-on-primary)"}const t0=w({enabled:Q().default(!1),hero:Hb.default({}),featured:Vb.default({}),howItWorks:Qb.default({}),benefits:Zb.default({}),testimonials:Kb.default({}),faq:Jb.default({}),footer:e0.default({})}),tf=$(["solid","gradient"]),nf=$(["sharp","rounded","pill"]),af=$(["solid","outline"]),rf=$(["flat","elevated"]),of=$(["minimal","premium","friendly","bold","elegant","playful","custom"]),os=c().regex(/^#([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/),sf=$(["customer_quote","business_followup","business_accepted","business_rejected","business_updated_proposal","business_final_order","business_confirmation_request"]),lf=gt(sf,gt(c())).default({}),n0=w({logoUrl:c().nullable().optional(),faviconUrl:c().nullable().optional(),primaryColor:c().default("#111827"),secondaryColor:c().default("#6B7280"),accentColor:c().nullable().default(null),backgroundStyle:tf.default("gradient"),cornerStyle:nf.default("rounded"),buttonStyle:af.default("solid"),cardStyle:rf.default("elevated"),themePreset:of.default("custom"),heroTextColors:_d,whatsappNumber:c().nullable().optional(),whatsappTemplates:lf});w({logoUrl:c().url().nullable().optional(),faviconUrl:c().url().nullable().optional(),primaryColor:os.optional(),secondaryColor:os.optional(),accentColor:os.nullable().optional(),backgroundStyle:tf.optional(),cornerStyle:nf.optional(),buttonStyle:af.optional(),cardStyle:rf.optional(),themePreset:of.optional(),heroTextColors:_d.optional(),whatsappNumber:c().regex(/^\d{6,15}$/,"WhatsApp number must be 6-15 digits, no symbols").nullable().optional(),whatsappTemplates:lf.optional()});w({name:c().trim().min(1).max(120),slug:Gv,defaultCurrency:c().default("USD"),industryPresetId:c().trim().min(1).max(40).optional(),industry:c().trim().min(1).max(80).optional(),description:c().trim().max(500).optional(),defaultLanguage:$(["es","en"]).optional(),contact:w({whatsapp:c().regex(/^\d{6,15}$/,"WhatsApp number must be 6-15 digits, no symbols").optional(),email:c().email().optional()}).optional()});const a0=["not_started","in_progress","complete"],df=$(a0),i0=["inactive","active","suspended"],uf=$(i0),r0=w({catalogItemCount:A().int().nonnegative(),brandingApplied:Q(),landingDraftCreated:Q(),whatsappTemplatesApplied:Q()});w({tenant:w({id:c().uuid(),slug:c(),name:c(),defaultCurrency:c(),industryPresetId:c().nullable(),setupStatus:df,publicSiteStatus:uf}),generated:r0});const Po=$(["es","en"]),Oa=c().trim().max(500).url({message:"Must be a valid URL"}).or(ct("")).nullable().optional(),o0=c().trim().max(254).email({message:"Must be a valid email"}).or(ct("")).nullable().optional(),Sn=c().trim().max(160).nullable().optional(),s0=c().trim().max(500).nullable().optional(),l0=c().trim().max(2e3).nullable().optional(),d0=c().regex(/^\d{6,15}$/,"WhatsApp number must be 6-15 digits, no symbols").or(ct("")).nullable().optional(),_o=w({email:o0,phone:Sn,whatsappNumber:d0,addressLine:Sn,city:Sn,country:Sn,serviceArea:Sn,businessHours:Sn}).default({}),jo=w({websiteUrl:Oa,instagramUrl:Oa,tiktokUrl:Oa,facebookUrl:Oa,linkedinUrl:Oa}).default({});w({tenant:w({id:c().uuid(),name:c(),slug:c(),status:$(["active","inactive"]),industry:c().nullable().default(null),description:c().nullable().default(null),defaultLanguage:Po.default("es"),defaultCurrency:c().default("USD")}),contact:_o,social:jo,quoteDisclaimer:c().nullable().default(null),publicUrl:c()});w({businessName:c().trim().min(1).max(120).optional(),industry:Sn,description:s0,defaultLanguage:Po.optional(),defaultCurrency:c().trim().min(3).max(3).optional(),contact:_o.optional(),social:jo.optional(),quoteDisclaimer:l0});w({contact:_o.optional(),social:jo.optional(),quoteDisclaimer:c().nullable().optional()}).default({});const u0=w({industry:c().nullable().default(null),description:c().nullable().default(null),contact:_o,social:jo,quoteDisclaimer:c().nullable().default(null)}),c0=["subscription_required","setup_incomplete","suspended"],m0=$(c0),p0=["active","inactive","not_found"],f0=$(p0),g0=w({status:f0,reason:m0.optional()}),h0=w({tenantSubdomain:Q(),legacyPublicUrl:c(),subdomainPublicUrl:c().nullable(),canonicalPublicUrl:c()});w({id:c().uuid(),slug:c(),name:c(),branding:n0,landing:t0.nullable().default(null),profile:u0.default({industry:null,description:null,contact:{},social:{},quoteDisclaimer:null}),publicSite:g0.default({status:"active"}),routing:h0.optional()});const y0=w({tenantId:c().uuid(),tenantSlug:c(),tenantName:c(),role:tb}),v0=["not_selected","pending_activation","demo_active","inactive","suspended"],b0=$(v0),x0=w({code:c(),name:c(),monthlyPrice:A(),currency:c(),billingPeriod:c(),tagline:c().nullable(),features:B(c()),featureFlags:B(c()).default([]),comingSoon:B(c()),position:A(),recommended:Q(),publiclySelectable:Q(),contactSales:Q(),limits:w({activeProducts:A().nullable(),monthlyPedidos:A().nullable(),internalUsers:A().nullable(),customStatuses:A().nullable(),assetStorageMb:A().nullable()})});w({plans:B(x0)});w({planTemplateId:c().min(1)});w({subscription:w({simulationStatus:b0,planTemplateId:c().nullable(),planName:c().nullable(),monthlyPrice:A().nullable(),tenantSubdomain:Q().default(!1)}),publicSite:w({status:uf,enabledAt:c().nullable(),setupCompletedAt:c().nullable()}),setupStatus:df});const cf=w({name:c().min(1).max(200),email:c().email().nullable().optional(),phone:c().min(3).max(40).nullable().optional()});w({quantity:A().int().positive().default(1),selections:gt(Co)});w({customer:cf,quantity:A().int().positive().default(1),selections:gt(Co),language:c().min(2).max(8).optional()});const S0=w({itemSlug:c().min(1),quantity:A().int().positive().default(1),selections:gt(Co)});w({customer:cf,language:c().min(2).max(8).optional(),notes:c().max(2e3).nullable().optional(),items:B(S0).min(1)});w({status:ko,override:Q().optional()});w({name:c().trim().min(1).max(200),whatsappE164:c().trim().min(3).max(40).nullable().optional(),phone:c().trim().min(3).max(40).nullable().optional(),email:c().trim().email().nullable().optional()});const w0=w({id:c().uuid(),quoteNumber:c(),customerName:c().nullable(),customerEmail:c().nullable(),customerPhone:c().nullable(),status:ko,source:fb,currency:c(),total:A(),createdAt:c(),deletedAt:c().nullable().optional()}),k0=w({id:c().uuid(),catalogItemId:c().uuid().nullable(),itemNameSnapshot:c(),basePriceSnapshot:A(),selectedOptionsSnapshot:B(Xp),priceBreakdown:B(Kp),total:A()}),C0=w({id:c().uuid(),eventType:c(),actorUserId:c().uuid().nullable(),payload:gt(gn()),createdAt:c()}),P0=w({id:c(),body:c(),authorUserId:c().nullable(),authorName:c().nullable(),createdAt:c()});w({body:c().min(1).max(2e3)});w0.extend({subtotal:A(),discount:A(),tax:A(),publicToken:c().nullable(),pricingSnapshot:gt(gn()),items:B(k0),events:B(C0),internalNotes:B(P0).default([])});w({status:ko.optional(),productId:c().uuid().optional(),from:c().optional(),to:c().optional(),q:c().optional(),view:$(["active","archived","deleted","all"]).optional()});const ur=c().regex(/^-?\d+(\.\d{1,4})?$/,"invalid money string"),jd=w({id:c().min(1),source:$(["catalog","manual"]),catalogItemId:c().uuid().optional(),catalogItemSlug:c().optional(),name:c().min(1),description:c().optional(),quantity:A().int().positive(),originalUnitPrice:ur.optional(),unitPrice:ur,priceOverrideReason:c().max(500).optional(),lineDiscount:w({type:$(["fixed","percentage"]),value:ur,reason:c().max(500).optional()}).optional(),selectionsSnapshot:gn().optional(),customerSelectionsLabel:B(c()).optional()}),Td=w({id:c().min(1),type:$(["discount","charge"]),scope:$(["global","line"]),lineItemId:c().optional(),label:c().min(1).max(200),amountType:$(["fixed","percentage"]),amount:ur,reason:c().max(500).optional()});w({id:c().uuid(),quoteId:c().uuid(),revisionNumber:A().int().positive(),status:hb,source:vb,items:B(jd),adjustments:B(Td),subtotal:A(),discountTotal:A(),chargesTotal:A(),total:A(),customerVisibleNotes:c().nullable(),internalNotes:c().nullable(),createdByUserId:c().uuid().nullable(),createdAt:c()});const _0=w({items:B(jd).min(1,"cannot save a revision with no items"),adjustments:B(Td).default([]),customerVisibleNotes:c().max(4e3).nullable().optional(),internalNotes:c().max(4e3).nullable().optional(),supersedePrior:Q().optional()});w({channel:$(["whatsapp","copy","other"]).default("whatsapp")});w({revision:_0.optional()});w({customer:w({name:c().min(1,"Customer name is required"),whatsappE164:c().optional(),phone:c().optional(),email:Sd([c().email(),ct("")]).optional()}),items:B(jd).min(1,"cannot create a pedido with no items"),adjustments:B(Td).default([]),customerVisibleNotes:c().max(4e3).nullable().optional(),internalNotes:c().max(4e3).nullable().optional()});w({quoteId:c().uuid(),revisionId:c().uuid()});w({quote:w({id:c().uuid(),quoteNumber:c(),status:ko,currency:c(),subtotal:A(),discount:A(),tax:A(),total:A(),publicToken:c()}),message:w({plainText:c(),whatsappUrl:c()})});w({cognitoSub:c().min(1),email:c().email(),displayName:c().nullable().optional()});const j0=w({id:c().uuid(),email:c().email(),displayName:c().nullable(),phone:c().nullable().default(null),avatarUrl:c().nullable().default(null),preferredLanguage:Po.nullable().default(null),status:ib});w({user:j0,memberships:B(y0)});w({displayName:c().trim().min(1).max(120).nullable().optional(),phone:c().trim().max(40).nullable().optional(),avatarUrl:c().trim().max(500).url({message:"Must be a valid URL"}).or(ct("")).nullable().optional(),preferredLanguage:Po.nullable().optional()});const T0=["USER_NOT_CONFIRMED","EMAIL_ALREADY_EXISTS","INVALID_PASSWORD","INVALID_CONFIRMATION_CODE","EXPIRED_CONFIRMATION_CODE","USER_NOT_FOUND","INVALID_CREDENTIALS","RATE_LIMITED","AUTH_PROVIDER_ERROR"];$(T0);const Na=c().email().max(254),mf=c().min(8).max(256);w({email:Na,password:mf,name:c().min(1).max(120)});w({email:Na,code:c().min(4).max(10)});w({email:Na});w({email:Na,password:c().min(1).max(256)});w({email:Na});w({email:Na,code:c().min(4).max(10),newPassword:mf});w({refreshToken:c().min(1)});w({accessToken:c().min(1).optional()});w({status:$(["confirmation_required","confirmed"]),email:c().email()});w({idToken:c(),accessToken:c(),refreshToken:c().optional(),expiresIn:A(),tokenType:ct("Bearer")});const Ed=sf.or($(["status_change","custom"])),Nd=$(Gp),E0=w({id:c().uuid(),slug:c(),labelEn:c(),labelEs:c(),color:Nd,displayOrder:A().int(),isSystem:Q(),isIrreversible:Q(),isTerminal:Q(),whatsappTemplateId:c().uuid().nullable()});w({statuses:B(E0)});const Jr=c().trim().min(1).max(40);w({labelEn:Jr,labelEs:Jr,color:Nd,isIrreversible:Q().default(!1),whatsappTemplateId:c().uuid().nullable().optional()});w({labelEn:Jr.optional(),labelEs:Jr.optional(),color:Nd.optional(),isIrreversible:Q().optional(),whatsappTemplateId:c().uuid().nullable().optional(),displayOrder:A().int().positive().optional()}).refine(e=>Object.keys(e).length>0,{message:"At least one field is required."});w({ids:B(c().uuid()).min(1)});const N0=w({id:c().uuid(),name:c(),kind:Ed,bodyEn:c(),bodyEs:c(),placeholders:B(c()),isSystem:Q()});w({templates:B(N0)});w({name:c().trim().min(1).max(80),kind:Ed,bodyEn:c().trim().min(1).max(4e3),bodyEs:c().trim().min(1).max(4e3),placeholders:B(c()).optional()});w({name:c().trim().min(1).max(80).optional(),kind:Ed.optional(),bodyEn:c().trim().min(1).max(4e3).optional(),bodyEs:c().trim().min(1).max(4e3).optional(),placeholders:B(c()).optional()}).refine(e=>Object.keys(e).length>0,{message:"At least one field is required."});const pf=["logo","favicon","hero","product_cover","product_gallery","option_image","avatar","quote_attachment","other"],A0=["pending","uploaded","attached","deleted"],I0=["s3","local_dev"],L0=["tenant","catalog_item","catalog_option","landing","quote","user"],q0=["image/jpeg","image/png","image/webp"],R0=w({type:$(L0),id:c().uuid().optional()});w({assetType:$(pf),filename:c().min(1).max(255),contentType:$(q0),sizeBytes:A().int().positive(),relatedEntity:R0.optional()});w({assetId:c().uuid(),uploadUrl:c().url(),method:ct("PUT"),headers:gt(c()),objectKey:c().min(1),publicUrl:c().url().optional(),expiresAt:c()});w({assetId:c().uuid(),width:A().int().positive().optional(),height:A().int().positive().optional(),checksum:c().max(128).optional()});w({id:c().uuid(),tenantId:c().uuid(),uploadedByUserId:c().uuid().nullable(),assetType:$(pf),storageProvider:$(I0),bucket:c().nullable(),objectKey:c(),publicUrl:c().nullable(),contentType:c(),sizeBytes:A().int(),width:A().int().nullable(),height:A().int().nullable(),originalFilename:c().nullable(),status:$(A0),metadata:gt(gn()),createdAt:c(),updatedAt:c()});w({name:c().min(1),slugSuffix:c().regex(/^[a-z0-9-]+$/),shortDescription:c().min(1),details:c().min(1),basePrice:A().nonnegative(),currency:c().default("USD"),category:c().min(1),badge:c().optional(),availability:Pd.default("available"),coverImageUrl:c().url().optional(),gallery:B(c().url()).default([]),customizationConfig:Cd,pricingHints:c().optional()});function F(e,t={}){return{groups:e,pricingRules:[],message:{includePriceBreakdown:!0,useLabelsOnly:!0},presentation:{gallery:[],benefits:t.benefits??[],included:t.included??[],notIncluded:t.notIncluded??[],deliveryTime:t.deliveryTime,faqs:t.faqs??[]}}}function E(e,t,n,a={}){return{key:e,label:t,type:"single_choice",order:a.order??1,validation:{required:a.required??!0},pricing:{mode:"none",tiers:[]},options:n.map((i,r)=>({key:i.key,label:i.label,priceAdjustment:i.priceAdjustment??0,available:!0,order:r+1}))}}function Hn(e,t,n,a=1){return{key:e,label:t,type:"multiple_choice",order:a,validation:{},pricing:{mode:"none",tiers:[]},options:n.map((i,r)=>({key:i.key,label:i.label,priceAdjustment:i.priceAdjustment??0,available:!0,order:r+1}))}}function N(e,t,n,a,i=1){return{key:e,label:t,type:"boolean",order:i,trueLabel:n,priceWhenTrue:a,validation:{},pricing:{mode:"none",tiers:[]},options:[]}}function ie(e,t,n,a={}){return{key:e,label:t,type:"quantity",order:a.order??1,unitLabel:a.unitLabel??"unidades",validation:{required:!0,min:a.min??1,max:a.max??1e3},pricing:{mode:"per_unit",unitPrice:n,tiers:[]},options:[],defaultValue:a.defaultValue??a.min??1}}function Fa(e,t,n={}){return{key:e,label:t,type:"text",order:n.order??1,placeholder:n.placeholder,affectsMessage:n.affectsMessage??!0,validation:{required:n.required??!1,maxLength:n.maxLength??80},pricing:{mode:"none",tiers:[]},options:[]}}function C(e,t,n,a=1){return{key:e,title:t,order:a,collapsible:!1,fields:n}}const Ba="https://images.unsplash.com";`${Ba}`,F([C("material","Material y color",[E("material","Material",[{key:"pla",label:"PLA",priceAdjustment:0},{key:"petg",label:"PETG",priceAdjustment:4},{key:"abs",label:"ABS",priceAdjustment:6}]),E("color","Color",[{key:"black",label:"Negro"},{key:"white",label:"Blanco"},{key:"red",label:"Rojo"},{key:"blue",label:"Azul"}],{order:2})]),C("size","Tamaño y acabado",[E("scale","Escala aproximada",[{key:"small",label:"Hasta 10 cm",priceAdjustment:0},{key:"medium",label:"10–20 cm",priceAdjustment:8},{key:"large",label:"Más de 20 cm",priceAdjustment:18}]),N("sanding","Lijado fino","Sí, acabado lijado",5,2)],2)],{benefits:["Revisión gratuita del archivo antes de imprimir","Materiales certificados PLA, PETG o ABS","Asesoría de orientación para piezas resistentes","Empaque protector para envío"],included:["Impresión","Retiro de soportes básicos","Revisión de archivo","1 revisión menor post-impresión"],notIncluded:["Diseño 3D desde cero","Pintura o tratamiento químico"],deliveryTime:"3 a 5 días hábiles",faqs:[{question:"¿Cuánto tarda la impresión?",answer:"Entre 3 y 5 días hábiles según tamaño y material."},{question:"¿Qué archivos aceptan?",answer:"STL, 3MF u OBJ; también podemos modelar desde una idea."}]}),`${Ba}`,F([C("size","Tamaño",[E("size","Tamaño",[{key:"small",label:"Pequeña (8 cm)",priceAdjustment:0},{key:"medium",label:"Mediana (12 cm)",priceAdjustment:5},{key:"large",label:"Grande (16 cm)",priceAdjustment:10}])]),C("design","Diseño de tapa",[Fa("text","Texto del relieve",{placeholder:"Ej. iniciales o frase corta",maxLength:24,required:!0}),N("relief","Relieve en la tapa","Sí, incluir relieve",2.5,2),E("material","Material",[{key:"pla",label:"PLA"},{key:"petg",label:"PETG",priceAdjustment:3}],{order:3})],2)],{benefits:["Relieve personalizado en tapa","Varios tamaños para regalo","Colores a elección","Empaque simple incluido"],included:["Impresión completa","Relieve según texto","Revisión de legibilidad"],notIncluded:["Diseño gráfico complejo","Barniz premium"],deliveryTime:"3 a 4 días hábiles",faqs:[{question:"¿Puedo poner un logo?",answer:"Sí, en relieve simple; logos complejos pueden requerir adaptación."},{question:"¿Es apta para alimentos?",answer:"No recomendada para contacto directo con alimentos sin tratamiento especial."}]}),F([C("spec","Especificaciones",[E("resolution","Resolución",[{key:"standard",label:"Estándar (0.2 mm)"},{key:"fine",label:"Fina (0.1 mm)",priceAdjustment:10}]),Fa("notes","Notas técnicas",{maxLength:240,order:2})]),C("material","Material funcional",[E("material","Material",[{key:"petg",label:"PETG"},{key:"abs",label:"ABS",priceAdjustment:8},{key:"nylon",label:"Nylon reforzado",priceAdjustment:22}]),N("tolerance","Informe de tolerancias","Sí, incluir informe",12,2)],2)],{benefits:["Validación rápida de diseño","Materiales funcionales","Capa fina opcional","Notas técnicas documentadas"],included:["Impresión según STL","Revisión de manufacturabilidad","Limpieza de soportes"],notIncluded:["Post-mecanizado CNC","Certificación industrial"],deliveryTime:"5 a 7 días hábiles",faqs:[{question:"¿Sirve para pruebas de ensamble?",answer:"Sí, con tolerancia ±0.2 mm en la mayoría de geometrías."},{question:"¿Firman NDA?",answer:"Sí, bajo solicitud para archivos confidenciales."}]}),F([C("qty","Cantidad",[ie("qty","Unidades",4.5,{min:1,max:200,defaultValue:10,unitLabel:"unidades"})]),C("finish","Acabado",[E("color","Color",[{key:"white",label:"Blanco"},{key:"black",label:"Negro"},{key:"gold",label:"Dorado metálico",priceAdjustment:1.5}]),N("ring","Gancho metálico","Sí, con gancho",.8,2)],2)],{benefits:["Ideal para eventos","Precio por unidad claro","Producción rápida","Varios colores"],included:["Impresión","Bolsa individual","Revisión de archivo"],notIncluded:["Diseño 3D complejo","Empaque premium"],deliveryTime:"2 a 3 días hábiles",faqs:[{question:"¿Hay mínimo de pedido?",answer:"Desde 1 unidad; descuento implícito por volumen en cantidad."},{question:"¿Pueden ser personajes con licencia?",answer:"Solo diseños propios o con derechos que nos compartas."}]}),`${Ba}`,F([C("coverage","Cobertura",[E("hours","Duración",[{key:"4h",label:"4 horas",priceAdjustment:-200},{key:"6h",label:"6 horas"},{key:"8h",label:"8 horas",priceAdjustment:300}]),Hn("extras","Extras",[{key:"second",label:"Segundo fotógrafo",priceAdjustment:250},{key:"album",label:"Álbum impreso",priceAdjustment:150},{key:"drone",label:"Tomas con dron",priceAdjustment:200}],2)]),C("delivery","Entrega",[E("photos","Fotos editadas",[{key:"200",label:"200 fotos"},{key:"350",label:"350 fotos",priceAdjustment:120},{key:"500",label:"500 fotos",priceAdjustment:220}]),N("rush","Entrega prioritaria (2 semanas)","Sí, prioritaria",180,2)],2)],{benefits:["Cobertura completa del evento","Edición profesional incluida","Galería online privada","Coordinación pre-boda"],included:["Fotógrafo principal","Edición y color","Galería digital","Reunión de planificación"],notIncluded:["Video","Álbum impreso (extra)","Traslado fuera de zona base"],deliveryTime:"3 a 4 semanas después del evento",faqs:[{question:"¿Cuántas fotos entregan?",answer:"Según paquete: de 200 a 500 fotos editadas en alta resolución."},{question:"¿Reservan con anticipo?",answer:"Sí, 30% para bloquear fecha; saldo una semana antes."}]}),F([C("options","Opciones",[E("location","Locación",[{key:"outdoor",label:"Exteriores"},{key:"studio",label:"Estudio",priceAdjustment:50}]),N("rush","Entrega exprés (48h)","Sí, en 48h",60,2)]),C("looks","Estilo",[E("looks","Outfits",[{key:"1",label:"1 look"},{key:"2",label:"2 looks",priceAdjustment:40}]),N("mua","Maquillaje y peinado","Sí, incluir MUAH",85,2)],2)],{benefits:["Ambiente relajado pre-boda","Fotos listas para invitación","Asesoría de vestuario","Locaciones icónicas"],included:["2 h de sesión","60 fotos editadas","Dirección de poses"],notIncluded:["Video","Impresiones","Traslado lejano"],deliveryTime:"7 a 10 días hábiles",faqs:[{question:"¿Puedo traer mi perro?",answer:"Sí, con aviso previo para elegir locación adecuada."},{question:"¿Qué pasa si llueve?",answer:"Reprogramamos sin costo o movemos a estudio según disponibilidad."}]}),F([C("coverage","Cobertura",[E("format","Formato",[{key:"highlights",label:"Highlights (5 min)"},{key:"full",label:"Película completa",priceAdjustment:400}]),E("hours","Horas de rodaje",[{key:"4h",label:"4 horas"},{key:"6h",label:"6 horas",priceAdjustment:150},{key:"8h",label:"8 horas",priceAdjustment:280}],{order:2})]),C("extras","Extras de video",[N("drone","Tomas con dron","Sí, incluir dron",220,1),N("teaser","Teaser 60 s para redes","Sí, teaser",90,2)],2)],{benefits:["Estilo cinematográfico","Música licenciada","Entrega 4K","Coordinación con foto"],included:["Operador principal","Edición y color","Archivo digital 4K"],notIncluded:["Ceremonia completa sin editar","Segunda cámara (extra)"],deliveryTime:"4 a 6 semanas después del evento",faqs:[{question:"¿Incluyen micrófonos para vows?",answer:"Sí, en paquete completo; en highlights puede ser ambiente."},{question:"¿Puedo elegir la música?",answer:"Sugerimos opciones licenciadas; también puedes proponer pistas con derechos."}]}),F([C("location","Locación",[E("location","Tipo de locación",[{key:"beach",label:"Playa"},{key:"forest",label:"Bosque",priceAdjustment:30},{key:"urban",label:"Urbano",priceAdjustment:20}])]),C("style","Estilo",[E("mood","Mood",[{key:"dramatic",label:"Dramático"},{key:"fun",label:"Divertido"},{key:"editorial",label:"Editorial",priceAdjustment:50}]),N("assistant","Asistente de vestuario","Sí, asistente",45,2)],2)],{benefits:["Fotos únicas para álbum especial","Dirección creativa","Locaciones escénicas","Edición artística"],included:["1.5 h de sesión","40 fotos editadas","Asesoría de seguridad en locación"],notIncluded:["Limpieza del vestido","Transporte largo"],deliveryTime:"10 a 14 días hábiles",faqs:[{question:"¿Dañan el vestido?",answer:"Puede mancharse o mojarse; debe ser un vestido que aceptes estropear."},{question:"¿Hacen la sesión el día después?",answer:"Recomendamos 1–3 días después de la boda."}]}),`${Ba}`,F([C("event","Tu evento",[ie("guests","Número de invitados",25,{min:10,max:500,defaultValue:50,unitLabel:"personas"}),E("protein","Plato principal",[{key:"chicken",label:"Pollo"},{key:"beef",label:"Res",priceAdjustment:5},{key:"fish",label:"Pescado",priceAdjustment:8},{key:"veg",label:"Vegetariano"}],{order:2})]),C("service","Servicio",[E("service","Nivel de servicio",[{key:"standard",label:"Estándar"},{key:"premium",label:"Premium (+ mesero dedicado)",priceAdjustment:4}]),N("dessert_bar","Mesa de postres","Sí, mesa de postres",3,2)],2)],{benefits:["Menú de 3 tiempos","Servicio de meseros","Opciones vegetarianas","Coordinación con venue"],included:["Entrada, plato y postre","Montaje básico","Vajilla estándar","Meseros según tamaño"],notIncluded:["Bebidas alcohólicas","Mobiliario premium"],deliveryTime:"Servicio el día del evento",faqs:[{question:"¿Tienen opciones para alergias?",answer:"Sí, con menú alternativo si nos avisas con 7 días de anticipación."},{question:"¿El precio es por persona?",answer:"Sí, más extras de servicio seleccionados."}]}),F([C("details","Detalles",[ie("guests","Personas",9,{min:5,max:200,defaultValue:20,unitLabel:"personas"}),N("dessert","Agregar postre","Sí, incluir postres",30,2)]),C("beverages","Bebidas",[E("coffee","Café",[{key:"regular",label:"Regular"},{key:"premium",label:"Premium / especialidades",priceAdjustment:2}]),N("sparkling","Agua mineral con gas","Sí, incluir",1.5,2)],2)],{benefits:["Montaje rápido en sala","Opción de postres","Bebidas calientes y frías","Ideal para 5–200 personas"],included:["Café y té","3 bocadillos","Vajilla desechable o estándar","Montaje y retiro"],notIncluded:["Almuerzo completo","Mobiliario de sala"],deliveryTime:"El día del evento en horario acordado",faqs:[{question:"¿Pueden en mi oficina?",answer:"Sí, llevamos todo listo para servir en sala de juntas."},{question:"¿Hay opción vegetariana?",answer:"Sí, indícalo al pedir y adaptamos bocadillos."}]}),F([C("bar","Configuración",[E("tier","Selección de licores",[{key:"standard",label:"Estándar"},{key:"premium",label:"Premium",priceAdjustment:200}]),N("mixology","Show de mixología","Sí, incluir show",150,2)]),C("duration","Duración",[E("hours","Horas de barra",[{key:"3h",label:"3 horas",priceAdjustment:-80},{key:"4h",label:"4 horas"},{key:"6h",label:"6 horas",priceAdjustment:180}]),N("mocktails","Estación mocktails","Sí, sin alcohol",90,2)],2)],{benefits:["Bartender certificado","Barra montada en sitio","Show de mixología opcional","Cristalería incluida"],included:["Bartender","Barra y hielo","Licores del tier elegido","Guarniciones básicas"],notIncluded:["Licores fuera de paquete","Seguridad del venue"],deliveryTime:"Montaje 1 h antes del evento",faqs:[{question:"¿Traen el bar?",answer:"Sí, barra móvil y herramientas; necesitamos espacio y toma eléctrica."},{question:"¿Pueden solo mocktails?",answer:"Sí, con recargo menor que barra premium con alcohol."}]}),F([C("guests","Comensales",[ie("guests","Personas",18,{min:15,max:150,defaultValue:30,unitLabel:"personas"})]),C("stations","Estaciones",[Hn("stations","Agregar estaciones",[{key:"waffles",label:"Estación waffles",priceAdjustment:3},{key:"mimosa",label:"Barra mimosas",priceAdjustment:5},{key:"kids",label:"Menú infantil",priceAdjustment:2}]),N("coffee","Café de especialidad","Sí, barista",120,2)],2)],{benefits:["Ambiente brunch","Estaciones opcionales","Ideal domingos","Menú infantil disponible"],included:["Buffet base 3 h","Bebidas sin alcohol","Montaje y servicio","Vajilla"],notIncluded:["Decoración","Música en vivo"],deliveryTime:"Servicio en fecha acordada",faqs:[{question:"¿Cuál es el mínimo?",answer:"15 personas; bajo eso puede aplicarse recargo fijo."},{question:"¿Incluyen mimosas con alcohol?",answer:"Solo si eliges la estación de mimosas; verificamos edad en sitio."}]}),`${Ba}`,F([C("design","Tu diseño",[Fa("text","Texto a imprimir",{placeholder:'Ej. "Mejor mamá del mundo"',maxLength:40,required:!0}),E("color","Color interior",[{key:"white",label:"Blanco"},{key:"red",label:"Rojo",priceAdjustment:2},{key:"black",label:"Negro",priceAdjustment:2}],{order:2})]),C("packaging","Empaque",[N("wrap","Empaque de regalo","Sí, con empaque especial",3,1),E("qty","Cantidad",[{key:"1",label:"1 unidad"},{key:"6",label:"Pack 6",priceAdjustment:48},{key:"12",label:"Pack 12",priceAdjustment:90}],{order:2})],2)],{benefits:["Impresión durable","Varios colores de taza","Packs para eventos","Revisión de diseño"],included:["Taza 11 oz","Impresión full color","Bolsa protectora"],notIncluded:["Diseño gráfico complejo","Envío internacional"],deliveryTime:"3 a 5 días hábiles",faqs:[{question:"¿Puedo mandar foto?",answer:"Sí, JPG/PNG; también solo texto."},{question:"¿Son aptas para microondas?",answer:"Sí, cerámica estándar; lavar a mano prolonga el diseño."}]}),F([C("theme","Tema",[E("theme","Ocasión",[{key:"birthday",label:"Cumpleaños"},{key:"anniversary",label:"Aniversario"},{key:"newborn",label:"Recién nacido"},{key:"thankyou",label:"Agradecimiento"}]),Fa("dedication","Dedicatoria",{placeholder:"¿Qué quieres decirle?",maxLength:120,order:2})]),C("tier","Nivel",[E("tier","Tamaño de caja",[{key:"standard",label:"Estándar (4 ítems)"},{key:"premium",label:"Premium (6 ítems)",priceAdjustment:18}]),N("shipping","Envío a domicilio","Sí, envío local",6,2)],2)],{benefits:["Lista curada por ocasión","Presentación premium","Dedicatoria incluida","Envío opcional"],included:["Caja y relleno","Productos según tema","Tarjeta impresa"],notIncluded:["Productos fuera de catálogo tema","Arreglos florales frescos"],deliveryTime:"4 a 6 días hábiles",faqs:[{question:"¿Puedo ver qué incluye antes?",answer:"Te enviamos lista de ítems al confirmar el pedido."},{question:"¿Hacen corporativos?",answer:"Sí, con logo y mensaje de marca desde 10 unidades."}]}),F([C("size","Tamaño",[E("size","Tamaño",[{key:"s",label:"20×30 cm"},{key:"m",label:"30×40 cm",priceAdjustment:8},{key:"l",label:"40×60 cm",priceAdjustment:18}])]),C("finish","Acabado",[E("frame","Marco",[{key:"natural",label:"Madera natural"},{key:"black",label:"Negro",priceAdjustment:4},{key:"white",label:"Blanco",priceAdjustment:4}]),N("gift","Caja de regalo","Sí, caja regalo",5,2)],2)],{benefits:["Listo para colgar","Impresión HD","Marcos clásicos","Empaque regalo opcional"],included:["Impresión","Bastidor/marco","Herraje trasero"],notIncluded:["Retoque fotográfico avanzado","Vidrio museo"],deliveryTime:"5 a 7 días hábiles",faqs:[{question:"¿Qué resolución necesito?",answer:"Mínimo 150 DPI al tamaño final; te avisamos si pixela."},{question:"¿Puedo dividir en collage?",answer:"Sí, hasta 4 fotos en tamaño M o L con cargo de diseño."}]}),F([C("order","Pedido",[ie("qty","Kits",24,{min:10,max:500,defaultValue:25,unitLabel:"kits"})]),C("items","Contenido",[Hn("items","Productos del kit",[{key:"notebook",label:"Libreta A5"},{key:"pen",label:"Bolígrafo metálico",priceAdjustment:2},{key:"bottle",label:"Termo 500 ml",priceAdjustment:6}]),N("gift","Tarjeta de agradecimiento","Sí, tarjeta",1.2,2)],2)],{benefits:["Grabado láser durable","Mockup previo","Ideal onboarding","Embalaje individual"],included:["Grabado 1 color","Mockup","Caja master"],notIncluded:["Diseño de logo desde cero","Envío internacional"],deliveryTime:"10 a 14 días hábiles",faqs:[{question:"¿Qué formato de logo?",answer:"AI, PDF o SVG en curvas."},{question:"¿Hay muestra física?",answer:"Sí, en pedidos mayores a 50 kits."}]}),F([C("options","Opciones",[E("finish","Acabado",[{key:"classic",label:"Esmalte clásico"},{key:"gel",label:"Esmalte gel",priceAdjustment:10},{key:"acrylic",label:"Uñas acrílicas",priceAdjustment:25}]),N("paraffin","Tratamiento parafina","Sí, agregar parafina",8,2)]),C("nails","Uñas",[E("shape","Forma",[{key:"natural",label:"Natural"},{key:"almond",label:"Almendra",priceAdjustment:3},{key:"square",label:"Cuadrada",priceAdjustment:3}]),N("art","Nail art (2 uñas)","Sí, nail art",12,2)],2)],{benefits:["Higiene profesional","Variedad de acabados","Masaje relajante","Duración gel prolongada"],included:["Limpieza y limado","Esmalte estándar","Masaje de manos"],notIncluded:["Retiro de acrílico previo","Reparación de uña rota"],deliveryTime:"Cita el mismo día o en 48 h",faqs:[{question:"¿Cuánto dura el gel?",answer:"Hasta 2–3 semanas con cuidado adecuado."},{question:"¿Puedo traer mi esmalte?",answer:"Preferimos productos del salón por garantía."}]}),F([C("skin","Tu piel",[E("type","Tipo de piel",[{key:"dry",label:"Seca"},{key:"oily",label:"Mixta/grasa"},{key:"sensitive",label:"Sensible"}]),N("led","Terapia LED","Sí, agregar LED",15,2)]),C("boost","Potenciadores",[E("serum","Sérum",[{key:"none",label:"Sin sérum extra"},{key:"vitamin_c",label:"Vitamina C",priceAdjustment:12},{key:"hyaluronic",label:"Ácido hialurónico",priceAdjustment:10}]),N("neck","Tratamiento cuello","Sí, incluir cuello",8,2)],2)],{benefits:["Limpieza profunda","Masaje relajante","LED opcional","Productos según piel"],included:["Limpieza y mascarilla","Extracción controlada","Masaje facial"],notIncluded:["Peeling médico","Botox o rellenos"],deliveryTime:"Reserva en 24–72 h",faqs:[{question:"¿Duele la extracción?",answer:"Puede haber leve molestia; no trabajamos piel irritada activa."},{question:"¿Puedo maquillarme después?",answer:"Recomendamos esperar 4–6 h si hubo extracción intensa."}]}),F([C("event","Evento",[E("occasion","Ocasión",[{key:"social",label:"Social"},{key:"bride",label:"Novia",priceAdjustment:80},{key:"editorial",label:"Editorial",priceAdjustment:40}]),N("hair","Incluir peinado","Sí, peinado profesional",50,2)]),C("service","Servicio",[E("location","Lugar",[{key:"salon",label:"En salón"},{key:"home",label:"A domicilio",priceAdjustment:35}]),N("trial","Prueba previa (novia)","Sí, prueba",45,2)],2)],{benefits:["Duración prolongada","Productos premium","Peinado opcional","Prueba novia"],included:["Maquillaje completo","Preparación de piel","Fijación"],notIncluded:["Extensiones de pestañas","Uñas"],deliveryTime:"Según fecha del evento",faqs:[{question:"¿Cuánto dura el maquillaje?",answer:"8–12 h según piel y clima; lleva kit de retoque."},{question:"¿Van antes del evento?",answer:"Coordinamos horario según tu cronograma."}]}),F([C("brow","Cejas",[E("method","Método",[{key:"tweeze",label:"Pinza"},{key:"wax",label:"Cera",priceAdjustment:4},{key:"combo",label:"Combinado",priceAdjustment:6}])]),C("extras","Extras",[N("tint","Tinte","Sí, tinte",8,1),N("lash","Pestañas postizas","Sí, par básico",15,2)],2)],{benefits:["Diseño personalizado","Definición con tinte","Sesión rápida","Before event ready"],included:["Diseño","Depilación zona ceja","Higiene post-servicio"],notIncluded:["Microblading","Lifting de pestañas"],deliveryTime:"Walk-in o cita en 48 h",faqs:[{question:"¿Cuánto dura el tinte?",answer:"2–3 semanas según tipo de piel."},{question:"¿Qué pasa si uso retinol?",answer:"Evita retinol 48 h antes si usas cera."}]}),F([C("size","Tu espacio",[ie("sqm","Metros cuadrados",1.2,{min:30,max:500,defaultValue:80,unitLabel:"m²"}),N("windows","Incluir ventanas exteriores","Sí, ventanas",25,2)]),C("extras","Extras",[E("products","Productos",[{key:"standard",label:"Estándar ecológicos"},{key:"hypo",label:"Hipoalergénicos",priceAdjustment:.15}],{order:1}),N("oven","Limpieza de horno","Sí, horno",35,2)],2)],{benefits:["Cuadrilla verificada","Precio por m² claro","Productos incluidos","Ventanas opcionales"],included:["Limpieza profunda","Productos básicos","Supervisión final"],notIncluded:["Lavado de alfombras","Pintura"],deliveryTime:"Coordinación en 24–48 h",faqs:[{question:"¿Traen productos?",answer:"Sí, incluidos; hipoalergénicos con recargo por m²."},{question:"¿Cuánto tarda?",answer:"2–5 h según m² y personal asignado."}]}),F([C("details","Detalles",[Fa("issue","Describe el problema",{placeholder:'Ej. "Fuga en cocina"',maxLength:240,required:!0}),N("urgent","Atención urgente (mismo día)","Sí, urgente",25,2)]),C("property","Inmueble",[E("type","Tipo",[{key:"house",label:"Casa"},{key:"apt",label:"Departamento"},{key:"commercial",label:"Local comercial",priceAdjustment:15}]),N("parts","Incluir repuestos básicos","Sí, si aplica",0,2)],2)],{benefits:["Diagnóstico claro","Descuento al reparar","Urgencias disponibles","Técnicos certificados"],included:["1 h de visita","Pedido detallado","Recomendaciones de seguridad"],notIncluded:["Repuestos mayores sin aprobar","Obra civil"],deliveryTime:"Visita en 24 h o mismo día urgente",faqs:[{question:"¿La visita se descuenta?",answer:"Sí, del total si apruebas la reparación en 7 días."},{question:"¿Garantizan el trabajo?",answer:"30 días en mano de obra de la reparación hecha por nosotros."}]}),F([C("scope","Alcance",[ie("sqm","Metros cuadrados",6,{min:10,max:400,defaultValue:40,unitLabel:"m²"}),E("finish","Acabado",[{key:"standard",label:"Estándar"},{key:"washable",label:"Lavable",priceAdjustment:2}],{order:2})]),C("prep","Preparación",[E("condition","Estado de muro",[{key:"good",label:"Bueno"},{key:"repair",label:"Con resanes",priceAdjustment:1.5}]),N("ceiling","Incluir techo","Sí, techo",3,2)],2)],{benefits:["Precio por m²","Pintura lavable opcional","Protección de área","Dos manos incluidas"],included:["Mano de obra","Pintura estándar","Protección básica"],notIncluded:["Removedor de papel mural","Barnices especiales"],deliveryTime:"Inicio en 3–7 días según agenda",faqs:[{question:"¿Incluyen el color?",answer:"Sí, estándar; colores especiales pueden tener recargo."},{question:"¿Cuánto tarda?",answer:"1–3 días según m² y secado entre manos."}]}),F([C("units","Equipos",[ie("units","Mini-splits",35,{min:1,max:10,defaultValue:1,unitLabel:"equipos"})]),C("service","Servicio",[N("deep","Limpieza profunda serpentín","Sí, profunda",25,1),N("urgent","Prioridad 24 h","Sí, urgente",20,2)],2)],{benefits:["Mejor rendimiento","Menos malos olores","Extiende vida útil","Precio por equipo"],included:["Limpieza filtros","Revisión drenaje","Informe básico"],notIncluded:["Recarga de gas","Repuestos eléctricos"],deliveryTime:"Cita en 48–72 h",faqs:[{question:"¿Cuánto dura?",answer:"45–60 min por equipo estándar."},{question:"¿Y si necesita gas?",answer:"Cotizamos recarga aparte tras diagnóstico."}]}),F([C("engagement","Engagement",[ie("hours","Horas",120,{min:1,max:200,defaultValue:10,unitLabel:"horas"}),E("modality","Modalidad",[{key:"remote",label:"Remoto"},{key:"onsite",label:"En sitio",priceAdjustment:200}],{order:2})]),C("deliverables","Entregables",[E("report","Informe",[{key:"notes",label:"Notas de sesión"},{key:"deck",label:"Deck ejecutivo",priceAdjustment:350}]),N("nda","NDA firmado","Sí, NDA previo",0,2)],2)],{benefits:["Consultor senior","Remoto u onsite","Plan accionable","NDA disponible"],included:["Sesiones contratadas","Notas de sesión","Seguimiento por email 7 días"],notIncluded:["Implementación operativa","Licencias de software"],deliveryTime:"Inicio en 5 días hábiles",faqs:[{question:"¿Mínimo de horas?",answer:"Desde 4 h; paquetes con mejor tarifa desde 10 h."},{question:"¿Facturan?",answer:"Sí, factura con IVA según país."}]}),F([C("scope","Alcance",[E("area","Área",[{key:"ops",label:"Operaciones"},{key:"fin",label:"Finanzas",priceAdjustment:400},{key:"tech",label:"Tecnología",priceAdjustment:600}]),N("exec_summary","Presentación ejecutiva","Sí, incluir presentación",300,2)]),C("depth","Profundidad",[E("sites","Sitios",[{key:"1",label:"1 sitio"},{key:"3",label:"Hasta 3 sitios",priceAdjustment:500}]),N("workshop","Taller de cierre","Sí, taller 2 h",400,2)],2)],{benefits:["Resultados en 5 días","Plan priorizado","Enfoque ejecutivo","Multi-área"],included:["Diagnóstico","Informe PDF","Reunión de hallazgos"],notIncluded:["Implementación del plan","Software de BI"],deliveryTime:"5 días hábiles desde kickoff",faqs:[{question:"¿Necesitan acceso a sistemas?",answer:"Solo lectura o exportaciones que ustedes provean."},{question:"¿Es confidencial?",answer:"Sí, NDA estándar incluido."}]}),F([C("options","Opciones",[ie("attendees","Asistentes",35,{min:5,max:50,defaultValue:12,unitLabel:"personas"}),N("recording","Grabación profesional","Sí, grabación",250,2)]),C("topic","Tema",[E("topic","Enfoque",[{key:"leadership",label:"Liderazgo"},{key:"sales",label:"Ventas",priceAdjustment:150},{key:"ops",label:"Operaciones",priceAdjustment:200}]),N("lunch","Coffee break","Sí, break",180,2)],2)],{benefits:["Facilitador senior","Material impreso","Dinámicas prácticas","Grabación opcional"],included:["8 h facilitación","Materiales","Evaluación rápida"],notIncluded:["Viáticos fuera de ciudad","Certificación oficial"],deliveryTime:"Coordinación 2–3 semanas antes",faqs:[{question:"¿Cuántas personas máximo?",answer:"Hasta 50; ideal 12–25 para dinámicas."},{question:"¿Personalizan contenido?",answer:"Sí, con brief 10 días antes."}]}),F([C("scope","Alcance",[E("depth","Profundidad",[{key:"light",label:"Ligera (2 sem)"},{key:"full",label:"Completa (3 sem)",priceAdjustment:2e3}])]),C("geo","Cobertura",[E("markets","Mercados",[{key:"1",label:"1 país"},{key:"multi",label:"Multi-país",priceAdjustment:1200}]),N("mgmt","Entrevistas C-level","Sí, hasta 5",800,2)],2)],{benefits:["Memo para comité","Riesgos priorizados","Data room ordenado","Equipo M&A"],included:["Plan de trabajo","Entrevistas","Informe final"],notIncluded:["Legal","Auditoría financiera"],deliveryTime:"2 a 3 semanas",faqs:[{question:"¿Acceden a CRM?",answer:"Solo con autorización y acuerdo de confidencialidad."},{question:"¿En español e inglés?",answer:"Informe en español; inglés con recargo 15%."}]}),F([C("order","Tu pedido",[ie("qty","Cantidad",.18,{min:100,max:5e3,defaultValue:500,unitLabel:"unidades"}),E("finish","Acabado",[{key:"mate",label:"Mate"},{key:"gloss",label:"Brillante",priceAdjustment:10},{key:"soft",label:"Soft touch",priceAdjustment:25}],{order:2})]),C("corners","Detalle",[E("corners","Esquinas",[{key:"square",label:"Cuadradas"},{key:"round",label:"Redondeadas",priceAdjustment:8}]),N("proof","Prueba física","Sí, prueba",25,2)],2)],{benefits:["Full color","Volumen flexible","Acabados premium","Revisión pre-prensa"],included:["Impresión doble cara","Cartulina 300 g","Corte estándar"],notIncluded:["Diseño gráfico","Barniz sectorizado"],deliveryTime:"2 a 5 días hábiles",faqs:[{question:"¿Qué archivo envío?",answer:"PDF 300 dpi con sangrado 3 mm."},{question:"¿Hay mínimo?",answer:"100 unidades."}]}),F([C("size","Tamaño",[ie("sqm","Metros cuadrados",14,{min:1,max:100,defaultValue:4,unitLabel:"m²"}),N("eyelets","Reforzado con ojales","Sí, con ojales",5,2)]),C("finish","Acabado",[E("hem","Perímetro",[{key:"standard",label:"Estándar"},{key:"welded",label:"Soldado reforzado",priceAdjustment:3}]),N("install","Instalación en sitio","Sí, instalar",80,2)],2)],{benefits:["Full color gran formato","Ojales reforzados","Instalación opcional","Ideal ferias"],included:["Impresión","Lona 13 oz","Ojales si se eligen"],notIncluded:["Estructura metálica","Permisos municipales"],deliveryTime:"3 a 6 días hábiles",faqs:[{question:"¿Resiste exterior?",answer:"Sí, lona 13 oz para uso temporal exterior."},{question:"¿Máximo tamaño?",answer:"Hasta 100 m² por pieza; paneles para más."}]}),F([C("order","Tu pedido",[ie("qty","Cantidad",.4,{min:50,max:5e3,defaultValue:200,unitLabel:"stickers"}),E("shape","Forma",[{key:"circle",label:"Círculo"},{key:"square",label:"Cuadrado"},{key:"custom",label:"Corte personalizado",priceAdjustment:15}],{order:2})]),C("material","Material",[E("finish","Acabado",[{key:"matte",label:"Mate"},{key:"gloss",label:"Brillante",priceAdjustment:5}]),N("laminate","Laminado UV","Sí, laminado",12,2)],2)],{benefits:["Troquel preciso","Vinilo resistente","Corte custom","Desde 50 u."],included:["Impresión","Troquelado","Pliego entregado"],notIncluded:["Diseño vectorial","Hojas separadas manual"],deliveryTime:"2 a 4 días hábiles",faqs:[{question:"¿Pegan outdoor?",answer:"Mate estándar 1–2 años; laminado UV prolonga."},{question:"¿Corte interior?",answer:"Sí en custom con vector en curvas."}]}),F([C("order","Pedido",[ie("qty","Cantidad",2.8,{min:50,max:2e3,defaultValue:100,unitLabel:"folders"})]),C("finish","Acabado",[E("spot","Barniz",[{key:"none",label:"Sin barniz"},{key:"spot",label:"Barniz selectivo",priceAdjustment:35}]),N("pocket","Bolsillo CD/USB","Sí, bolsillo",.4,2)],2)],{benefits:["Imagen corporativa","Barniz selectivo","Pestaña interna","Volumen flexible"],included:["Impresión 4/0","Plegado","Pestaña"],notIncluded:["Contenido insertos","Diseño"],deliveryTime:"4 a 7 días hábiles",faqs:[{question:"¿Incluyen diseño?",answer:"Podemos cotizar diseño aparte."},{question:"¿Tamaño carta?",answer:"Sí, estándar carta/US letter."}]}),F([C("theme","Tema",[E("theme","Tema",[{key:"princess",label:"Princesas"},{key:"super",label:"Superhéroes"},{key:"jungle",label:"Jungla"},{key:"space",label:"Espacio"}]),N("balloon_arch","Arco de globos","Sí, incluir arco",80,2)]),C("party","Fiesta",[E("guests","Invitados",[{key:"15",label:"Hasta 15"},{key:"30",label:"Hasta 30",priceAdjustment:60},{key:"50",label:"Hasta 50",priceAdjustment:120}]),N("cake","Mesa de torta","Sí, mesa torta",45,2)],2)],{benefits:["Tema coordinado","Montaje y desmontaje","Arco de globos opcional","Backdrop para fotos"],included:["Backdrop","Mesa principal","Globos base","Montaje 3 h"],notIncluded:["Torta","Animación"],deliveryTime:"Montaje el día del evento",faqs:[{question:"¿Cuánto dura el montaje?",answer:"2–3 h antes; desmontaje al finalizar."},{question:"¿Traen todo?",answer:"Sí, excepto mesa del venue si no está incluida."}]}),F([C("scope","Alcance",[E("size","Tamaño del evento",[{key:"s",label:"Hasta 50 personas"},{key:"m",label:"50–150 personas",priceAdjustment:300},{key:"l",label:"150+ personas",priceAdjustment:800}]),N("photo_wall","Photo wall con logo","Sí, photo wall",200,2)]),C("brand","Marca",[E("floral","Estilo",[{key:"minimal",label:"Minimal"},{key:"lush",label:"Floral premium",priceAdjustment:250}]),N("led","Iluminación LED","Sí, LED",180,2)],2)],{benefits:["Branding integrado","Mockup previo","Photo wall opcional","Coordinación venue"],included:["Diseño","Montaje/desmontaje","Piezas principales"],notIncluded:["Catering","Audiovisual"],deliveryTime:"Según fecha del evento",faqs:[{question:"¿Necesitan logo vectorial?",answer:"Sí, AI/PDF/SVG para impresión nítida."},{question:"¿Anticipación?",answer:"Mínimo 3 semanas para eventos medianos."}]}),F([C("base","Base",[E("palette","Paleta",[{key:"blush",label:"Blush y verde"},{key:"classic",label:"Blanco clásico"},{key:"moody",label:"Tonos oscuros",priceAdjustment:150}])]),C("extras","Extras",[Hn("extras","Agrega lo que necesites",[{key:"arch",label:"Arco floral",priceAdjustment:350},{key:"aisle",label:"Pasillo decorado",priceAdjustment:200},{key:"lounge",label:"Lounge area",priceAdjustment:400}]),N("candles","Camino de velas","Sí, velas",120,2)],2)],{benefits:["Look romántico coherente","Flores frescas o mix","Iluminación cálida","Extras modulares"],included:["Mesa principal","Centros estándar","Montaje ceremonia"],notIncluded:["Ramos personal","Transporte internacional flores"],deliveryTime:"Día del evento",faqs:[{question:"¿Incluyen ramo de novia?",answer:"No, se cotiza aparte con florista."},{question:"¿Reserva de fecha?",answer:"30% anticipo al confirmar."}]}),F([C("qty","Cantidad",[ie("tables","Mesas",28,{min:5,max:80,defaultValue:15,unitLabel:"mesas"})]),C("style","Estilo",[E("style","Altura",[{key:"low",label:"Bajo"},{key:"tall",label:"Alto",priceAdjustment:8}]),N("candles","Velas","Sí, velas",4,2)],2)],{benefits:["Por mesa","Estilos alto/bajo","Coordinación con venue","Retiro opcional"],included:["Centro por mesa","Flor fresca estándar","Entrega en sitio"],notIncluded:["Mantelería","Jardineras grandes"],deliveryTime:"Día del evento",faqs:[{question:"¿Mínimo de mesas?",answer:"5 mesas."},{question:"¿Qué si sobran?",answer:"Ajustamos cantidad hasta 48 h antes."}]}),F([C("options","Opciones",[E("style","Estilo",[{key:"classic",label:"Clásico"},{key:"editorial",label:"Editorial",priceAdjustment:60}]),N("makeup","Maquillaje profesional","Sí, incluir maquillaje",80,2)]),C("delivery","Entrega",[E("photos","Fotos",[{key:"20",label:"20 fotos"},{key:"35",label:"35 fotos",priceAdjustment:45}]),N("print","Impresión 20×30","Sí, un print",25,2)],2)],{benefits:["Iluminación de estudio","Edición profesional","Dirección de poses","Entrega digital"],included:["1 h sesión","Fotos editadas","Galería online"],notIncluded:["Wardrobe stylist","Locación exterior"],deliveryTime:"5 a 7 días hábiles",faqs:[{question:"¿Qué ropa llevar?",answer:"Te enviamos guía tras reservar; evita estampas muy pequeñas."},{question:"¿Puedo traer a alguien?",answer:"Sí, un acompañante en estudio."}]}),F([C("team","Tu equipo",[ie("people","Personas",45,{min:1,max:100,defaultValue:5,unitLabel:"personas"}),N("onsite","En tus oficinas","Sí, en sitio",120,2)]),C("brand","Marca",[E("bg","Fondo",[{key:"gray",label:"Gris neutro"},{key:"brand",label:"Color de marca",priceAdjustment:8}]),N("retouch","Retoque avanzado","Sí, avanzado",6,2)],2)],{benefits:["Flujo rápido por persona","Look consistente","Onsite disponible","Listo para web"],included:["2 fotos finales por persona","Retoque estándar","Fondo acordado"],notIncluded:["Video","Fotos de instalaciones"],deliveryTime:"7 días hábiles post sesión",faqs:[{question:"¿Cuánto por persona extra?",answer:"Según cantidad en el pedido."},{question:"¿Necesitan logo?",answer:"Solo si eliges fondo de marca."}]}),F([C("order","Tu pedido",[ie("products","Productos",15,{min:1,max:200,defaultValue:10,unitLabel:"productos"}),E("background","Fondo",[{key:"white",label:"Blanco"},{key:"lifestyle",label:"Lifestyle",priceAdjustment:8}],{order:2})]),C("angles","Ángulos",[E("angles","Vistas por producto",[{key:"1",label:"1 vista"},{key:"3",label:"3 vistas",priceAdjustment:6}]),N("ghost","Ghost mannequin","Sí, ghost",12,2)],2)],{benefits:["Listo para e-commerce","Retoque color","Lifestyle opcional","Volumen flexible"],included:["Foto por SKU","Retoque básico","Export JPG"],notIncluded:["Modelo humano","Video 360"],deliveryTime:"5 a 10 días según volumen",faqs:[{question:"¿Envían los productos?",answer:"Sí, o recibimos en estudio con inventario firmado."},{question:"¿Devolución?",answer:"Sí, en 48 h tras la sesión."}]}),F([C("pack","Paquete",[E("size","Tamaño promedio",[{key:"small",label:"Pequeño (<30 cm)"},{key:"large",label:"Grande",priceAdjustment:60}])]),C("extras","Extras",[N("lifestyle","5 fotos lifestyle","Sí, 5 lifestyle",90,1),N("rush","Entrega 72 h","Sí, rush",80,2)],2)],{benefits:["Precio pack","Naming por SKU","Corrección incluida","Fondo blanco pro"],included:["20 SKU","Retoque","Entrega digital"],notIncluded:["Logística internacional","Props complejos"],deliveryTime:"7 días hábiles",faqs:[{question:"¿Más de 20?",answer:"Cotizamos por unidad adicional con descuento."},{question:"¿Reflejos en joyería?",answer:"Joyería tiene recargo por complejidad."}]}),F([C("brief","Tu brief",[E("category","Categoría",[{key:"fashion",label:"Moda"},{key:"commercial",label:"Comercial"},{key:"editorial",label:"Editorial",priceAdjustment:150}]),ie("models","Modelos requeridos",50,{min:1,max:20,defaultValue:3,unitLabel:"modelos"})]),C("usage","Uso",[E("license","Licencia orientativa",[{key:"local",label:"Local 6 meses"},{key:"national",label:"Nacional 12 meses",priceAdjustment:80}]),N("fitting","Fitting previo","Sí, fitting",120,2)],2)],{benefits:["Ahorro de tiempo","Perfiles filtrados","Coordinación centralizada","Brief estructurado"],included:["Hasta N perfiles","Tarifas orientativas","Coordinación"],notIncluded:["Sesión fotográfica","Derechos finales"],deliveryTime:"3 a 5 días hábiles",faqs:[{question:"¿Contrato directo con modelo?",answer:"Podemos intermediar o presentar para contrato directo."},{question:"¿Niños?",answer:"Sí, con permisos y tutor en set."}]}),F([C("booking","Tu reserva",[ie("hours","Horas",80,{min:1,max:12,defaultValue:4,unitLabel:"horas"}),E("level","Nivel del modelo",[{key:"new",label:"Nuevo talento"},{key:"pro",label:"Profesional",priceAdjustment:40},{key:"top",label:"Top model",priceAdjustment:120}],{order:2})]),C("logistics","Logística",[E("type","Tipo de trabajo",[{key:"photo",label:"Sesión foto"},{key:"event",label:"Evento",priceAdjustment:30}]),N("overtime","Hora extra pre-acordada","Sí, bloque extra",0,2)],2)],{benefits:["Tarifa por hora clara","Niveles de talento","Contrato de uso base","Flexible"],included:["Modelo","Coordinación","Uso local básico"],notIncluded:["MUAH","Transporte del modelo"],deliveryTime:"Según fecha reservada",faqs:[{question:"¿Mínimo de horas?",answer:"2 h en eventos; 1 h en estudio foto."},{question:"¿Cancelación?",answer:"48 h antes sin penalidad."}]}),F([C("package","Paquete",[E("looks","Cambios de look",[{key:"3",label:"3 looks"},{key:"5",label:"5 looks",priceAdjustment:120},{key:"8",label:"8 looks",priceAdjustment:250}]),N("mua","Maquillaje y peinado","Sí, incluir MUAH",90,2)]),C("output","Entregables",[E("photos","Fotos editadas",[{key:"25",label:"25 fotos"},{key:"40",label:"40 fotos",priceAdjustment:80}]),N("print","Comp card impreso","Sí, comp card",40,2)],2)],{benefits:["Producción llave en mano","Varios looks","Edición para book","MUAH opcional"],included:["Estudio","Fotógrafo","Edición base"],notIncluded:["Wardrobe","Agencia"],deliveryTime:"10 a 14 días hábiles",faqs:[{question:"¿Traen ropa?",answer:"Recomendamos guardarropa propio; podemos asesorar."},{question:"¿Derechos de imagen?",answer:"Uso personal y agencias; comercial es extra."}]}),F([C("group","Grupo",[ie("people","Participantes",25,{min:1,max:8,defaultValue:4,unitLabel:"personas"})]),C("focus","Enfoque",[E("focus","Modalidad",[{key:"runway",label:"Pasarela"},{key:"commercial",label:"Comercial",priceAdjustment:30}]),N("video","Grabación de práctica","Sí, video",35,2)],2)],{benefits:["Coach con experiencia","Práctica real","Video opcional","Grupos pequeños"],included:["2 h taller","Material de apoyo","Feedback individual breve"],notIncluded:["Book fotográfico","Representación"],deliveryTime:"Reserva en 1 semana",faqs:[{question:"¿Qué edad?",answer:"Desde 14 con autorización; adultos sin límite."},{question:"¿Traen zapatos?",answer:"Tacón cómodo propio; tenemos algunas tallas."}]}),F([C("scope","Alcance",[Hn("platforms","Plataformas",[{key:"ig",label:"Instagram"},{key:"fb",label:"Facebook"},{key:"tiktok",label:"TikTok",priceAdjustment:150},{key:"linkedin",label:"LinkedIn",priceAdjustment:120}]),E("volume","Volumen",[{key:"light",label:"8 publicaciones/mes"},{key:"standard",label:"16 publicaciones/mes",priceAdjustment:200},{key:"heavy",label:"30 publicaciones/mes",priceAdjustment:500}],{order:2})]),C("community","Comunidad",[E("cm","Community",[{key:"basic",label:"Respuesta básica"},{key:"full",label:"CM extendido",priceAdjustment:180}]),N("ads","Reporte de ads orgánicos","Sí, boost advice",0,2)],2)],{benefits:["Calendario mensual","Diseño y copy","Reporte KPIs","Multi-plataforma"],included:["Publicaciones del plan","Diseño plantillas","Reporte mensual"],notIncluded:["Pauta publicitaria","Influencers"],deliveryTime:"Inicio en 5 días hábiles",faqs:[{question:"¿Quién aprueba contenido?",answer:"Tú apruebas calendario semanal."},{question:"¿Manejan DMs?",answer:"Sí en plan CM extendido."}]}),F([C("campaign","Campaña",[E("channel","Canal",[{key:"meta",label:"Meta Ads"},{key:"google",label:"Google Ads",priceAdjustment:100},{key:"tiktok",label:"TikTok Ads",priceAdjustment:80}]),N("landing","Landing page incluida","Sí, incluir landing",350,2)]),C("budget","Gestión",[E("spend","Rango de inversión mensual",[{key:"low",label:"Hasta USD 1k"},{key:"mid",label:"USD 1k–5k",priceAdjustment:150},{key:"high",label:"USD 5k+",priceAdjustment:350}]),N("creative","Set de 5 creatividades extra","Sí, 5 extra",200,2)],2)],{benefits:["Setup profesional","Optimización semanal","Tracking","Landing opcional"],included:["Configuración","4 reportes","Optimización"],notIncluded:["Presupuesto de medios","Video UGC"],deliveryTime:"Kickoff en 3 días hábiles",faqs:[{question:"¿Mínimo de inversión?",answer:"Recomendamos USD 500/mes en medios para aprender."},{question:"¿Facturan medios?",answer:"No, pagas directo a Meta/Google."}]}),F([C("scope","Alcance",[E("depth","Profundidad",[{key:"quick",label:"Express (3 días)"},{key:"standard",label:"Estándar (2 semanas)",priceAdjustment:250},{key:"deep",label:"Profunda (4 semanas)",priceAdjustment:700}])]),C("site","Sitio",[E("pages","Páginas analizadas",[{key:"100",label:"Hasta 100 URLs"},{key:"500",label:"Hasta 500 URLs",priceAdjustment:200}]),N("workshop","Taller de resultados","Sí, taller 1 h",150,2)],2)],{benefits:["Backlog priorizado","Técnico + contenido","Entrega ejecutiva","Taller opcional"],included:["Crawl","Informe PDF","Lista de tareas"],notIncluded:["Implementación dev","Link building"],deliveryTime:"Según profundidad elegida",faqs:[{question:"¿Necesitan acceso GSC?",answer:"Recomendado, no obligatorio."},{question:"¿En español?",answer:"Sí, informe en español."}]}),F([C("platform","Plataforma",[E("tool","Herramienta",[{key:"mailchimp",label:"Mailchimp"},{key:"brevo",label:"Brevo"},{key:"other",label:"Otra",priceAdjustment:80}])]),C("content","Contenido",[E("templates","Plantillas",[{key:"3",label:"3 plantillas"},{key:"6",label:"6 plantillas",priceAdjustment:120}]),N("copy","Copywriting incluido","Sí, copy",90,2)],2)],{benefits:["Automatización lista","Plantillas responsive","Capacitación","Integración"],included:["Setup","3 templates","1 automation"],notIncluded:["Lista de contactos","Fee de plataforma"],deliveryTime:"10 días hábiles",faqs:[{question:"¿Migran contactos?",answer:"Importación básica incluida una vez."},{question:"¿Mantenimiento?",answer:"Mensual opcional aparte."}]}),F([C("order","Tu pedido",[ie("qty","Cantidad",14,{min:10,max:1e3,defaultValue:30,unitLabel:"unidades"}),E("color","Color",[{key:"white",label:"Blanco"},{key:"navy",label:"Azul marino"},{key:"black",label:"Negro"},{key:"custom",label:"Color personalizado",priceAdjustment:2}],{order:2})]),C("logo","Logo",[E("placement","Ubicación",[{key:"chest",label:"Pecho"},{key:"sleeve",label:"Manga",priceAdjustment:1.5}]),N("rush","Producción exprés (10 días)","Sí, exprés",60,2)],2)],{benefits:["Bordado durable","Volumen flexible","Exprés opcional","Asesoría de tallas"],included:["Polo piqué","Bordado 1 ubicación","Bolsa por unidad"],notIncluded:["Diseño de logo","Envío internacional"],deliveryTime:"2 a 4 semanas (10 días exprés)",faqs:[{question:"¿Mínimo?",answer:"10 unidades."},{question:"¿Tallas?",answer:"XS a 3XL; tabla al confirmar."}]}),F([C("order","Tu pedido",[ie("qty","Cantidad",28,{min:5,max:500,defaultValue:20,unitLabel:"conjuntos"}),Hn("extras","Extras",[{key:"reflective",label:"Tira reflectiva",priceAdjustment:3},{key:"name",label:"Bordado con nombres",priceAdjustment:2}],2)]),C("fabric","Tela",[E("fabric","Composición",[{key:"poly",label:"Poliéster algodón"},{key:"stretch",label:"Con stretch",priceAdjustment:4}]),N("sample","Muestra pre-producción","Sí, muestra",45,2)],2)],{benefits:["Resistente al uso diario","Bordado de marca","Reflectivos opcionales","Nombres por pieza"],included:["Camisa y pantalón","Bordado logo","Etiqueta talla"],notIncluded:["Calzado","EPP especializado"],deliveryTime:"3 a 4 semanas",faqs:[{question:"¿Mínimo 5?",answer:"Sí; menos solo bajo cotización especial."},{question:"¿Lavado industrial?",answer:"Tela pensada para lavado frecuente."}]}),F([C("order","Tu pedido",[ie("qty","Cantidad",9,{min:20,max:2e3,defaultValue:100,unitLabel:"camisetas"}),E("colors","Colores de estampado",[{key:"1",label:"1 color"},{key:"2",label:"2 colores",priceAdjustment:1},{key:"4",label:"4 colores",priceAdjustment:2.5}],{order:2})]),C("shirt","Prenda",[E("fit","Corte",[{key:"unisex",label:"Unisex"},{key:"fitted",label:"Fitted",priceAdjustment:1}]),N("bag","Bolsa individual","Sí, bolsa",.6,2)],2)],{benefits:["Serigrafía durable","Volumen eventos","Corte unisex o fitted","Kits listos"],included:["Camiseta algodón","Estampado","Separación por talla"],notIncluded:["Diseño complejo","Etiquetas tejidas"],deliveryTime:"2 a 3 semanas",faqs:[{question:"¿Mínimo 20?",answer:"Sí, para serigrafía."},{question:"¿Fecha evento?",answer:"Confirma 3 semanas antes."}]}),F([C("order","Pedido",[ie("qty","Cantidad",11,{min:10,max:500,defaultValue:25,unitLabel:"chalecos"})]),C("mark","Marca",[E("method","Logo",[{key:"screen",label:"Serigrafía"},{key:"embroidery",label:"Bordado",priceAdjustment:2}]),N("id","Bolsillo credencial","Sí, bolsillo",1.2,2)],2)],{benefits:["Alta visibilidad","Logo visible","Precio por volumen","Uso industrial"],included:["Chaleco reflectivo","Logo 1 color","Tallas variadas"],notIncluded:["Certificación normativa específica","Pantalonera"],deliveryTime:"2 a 3 semanas",faqs:[{question:"¿Cumple norma local?",answer:"Consulta tu normativa; diseño estándar alta visibilidad."},{question:"¿Tallas?",answer:"Única ajustable o S–XL según stock."}]}),F([C("scope","Alcance",[E("duration","Duración",[{key:"60s",label:"60 segundos"},{key:"90s",label:"90 segundos",priceAdjustment:400},{key:"120s",label:"2 minutos",priceAdjustment:900}]),N("voiceover","Locución profesional","Sí, incluir locución",200,2)]),C("production","Producción",[E("locations","Locaciones",[{key:"1",label:"1 locación"},{key:"2",label:"2 locaciones",priceAdjustment:350}]),N("subs","Subtítulos ES/EN","Sí, subtítulos",80,2)],2)],{benefits:["Storyboard incluido","Locución opcional","2 revisiones","Formatos web"],included:["Rodaje 1 día","Edición","Color básico","Master HD"],notIncluded:["Actores talento","Música custom"],deliveryTime:"3 a 6 semanas",faqs:[{question:"¿Incluyen guion?",answer:"Sí, guion corto basado en brief."},{question:"¿Rodaje donde?",answer:"Oficinas o locación acordada en ciudad base."}]}),F([C("event","Tu evento",[ie("hours","Horas de cobertura",180,{min:1,max:12,defaultValue:4,unitLabel:"horas"}),N("drone","Tomas con dron","Sí, incluir dron",250,2)]),C("deliverables","Entregables",[E("cut","Resumen",[{key:"short",label:"2 min"},{key:"long",label:"4 min",priceAdjustment:200}]),N("photos","Fotógrafo adicional","Sí, fotos",300,2)],2)],{benefits:["Resumen listo para redes","Dron opcional","Por hora flexible","Audio ambiente"],included:["Operador","Edición resumen","Archivo digital"],notIncluded:["Transmisión en vivo","Multi-cámara broadcast"],deliveryTime:"10 a 14 días post evento",faqs:[{question:"¿Mínimo horas?",answer:"2 h."},{question:"¿Permisos dron?",answer:"Gestionamos donde la ley lo permita."}]}),F([C("episode","Episodio",[E("length","Duración",[{key:"30",label:"Hasta 30 minutos"},{key:"60",label:"30–60 minutos",priceAdjustment:80},{key:"90",label:"60–90 minutos",priceAdjustment:160}]),N("video","Versión en video","Sí, agregar video",150,2)]),C("package","Paquete",[ie("eps","Episodios al mes",180,{min:1,max:8,defaultValue:4,unitLabel:"episodios"}),N("intro","Intro musical custom","Sí, intro",120,2)],2)],{benefits:["Audio broadcast","Edición limpia","Video opcional","Paquete mensual"],included:["Estudio 1 h","Edición","Export MP3"],notIncluded:["Distribución RSS","Guests internacionales"],deliveryTime:"5 días por episodio",faqs:[{question:"¿Remoto?",answer:"Sí, con Riverside o similar; calidad según internet invitado."},{question:"¿Intro incluida?",answer:"Plantilla estándar; custom es extra."}]}),F([C("spot","Spot",[E("ratio","Formatos",[{key:"both",label:"16:9 y 9:16"},{key:"tv",label:"Solo 16:9",priceAdjustment:-100}])]),C("talent","Talento",[E("cast","Cast",[{key:"none",label:"Sin talento"},{key:"voice",label:"Voz en off",priceAdjustment:150},{key:"actors",label:"Actores 2 personas",priceAdjustment:600}]),N("rush","Entrega 2 semanas","Sí, rush",400,2)],2)],{benefits:["Listo para pauta","Vertical y horizontal","Música licenciada","Concepto creativo"],included:["Guion","Rodaje 1 día","Post y master"],notIncluded:["Pauta TV","Celebridad"],deliveryTime:"3 a 4 semanas (2 con rush)",faqs:[{question:"¿Aprobación de marca?",answer:"2 rondas de revisión en post."},{question:"¿15 s exactos?",answer:"Sí, para TV; redes puede variante 6 s extra aparte."}]});function vn(e){return{groups:e.groups,pricingRules:[],message:{includePriceBreakdown:!0,useLabelsOnly:!0},presentation:{gallery:[],benefits:[],included:[],notIncluded:[],faqs:e.faqs??[]}}}vn({groups:[{key:"personalization",title:"Personalización",order:1,collapsible:!1,fields:[{key:"color",label:"Color",type:"single_choice",order:1,validation:{required:!0},pricing:{mode:"none",tiers:[]},options:[{key:"black",label:"Negro",priceAdjustment:0,available:!0,order:1},{key:"white",label:"Blanco",priceAdjustment:0,available:!0,order:2},{key:"red",label:"Rojo",priceAdjustment:0,available:!0,order:3}]},{key:"size",label:"Tamaño",type:"single_choice",order:2,validation:{required:!0},pricing:{mode:"none",tiers:[]},options:[{key:"small",label:"Pequeño",priceAdjustment:0,available:!0,order:1},{key:"medium",label:"Mediano",priceAdjustment:3,available:!0,order:2},{key:"large",label:"Grande",priceAdjustment:7,available:!0,order:3}]},{key:"notes",label:"Notas adicionales",type:"textarea",order:3,placeholder:"¿Algún detalle que debamos saber?",affectsMessage:!0,validation:{},pricing:{mode:"none",tiers:[]},options:[]}]}],faqs:[{question:"¿Cuánto tarda la producción?",answer:"Por lo general entre 3 y 5 días hábiles."}]}),vn({groups:[{key:"package",title:"Elige tu paquete",order:1,collapsible:!1,fields:[{key:"tier",label:"Paquete",type:"single_choice",order:1,validation:{required:!0},pricing:{mode:"none",tiers:[]},options:[{key:"basic",label:"Básico",priceAdjustment:0,available:!0,order:1},{key:"standard",label:"Estándar",priceAdjustment:30,available:!0,order:2},{key:"premium",label:"Premium",priceAdjustment:80,available:!0,order:3}]},{key:"urgent",label:"Atención prioritaria",type:"boolean",order:2,trueLabel:"Sí, lo necesito pronto",priceWhenTrue:15,validation:{},pricing:{mode:"none",tiers:[]},options:[]}]}]}),vn({groups:[{key:"addons",title:"Complementos",order:1,collapsible:!1,fields:[{key:"extras",label:"Agrega lo que necesites",type:"multiple_choice",order:1,validation:{},pricing:{mode:"none",tiers:[]},options:[{key:"rush",label:"Entrega rápida",priceAdjustment:10,available:!0,order:1},{key:"gift",label:"Empaque de regalo",priceAdjustment:5,available:!0,order:2},{key:"install",label:"Instalación incluida",priceAdjustment:20,available:!0,order:3}]}]}]}),vn({groups:[{key:"quantity",title:"Cantidad",order:1,collapsible:!1,fields:[{key:"units",label:"Unidades",type:"quantity",order:1,unitLabel:"unidades",validation:{min:1,max:1e3},pricing:{mode:"per_unit",unitPrice:1,tiers:[]},options:[],defaultValue:100}]}],faqs:[{question:"¿Hay descuento por volumen?",answer:"Sí, contáctanos para volúmenes superiores a 500 unidades."}]}),vn({groups:[{key:"package",title:"Tu paquete",order:1,collapsible:!1,fields:[{key:"duration",label:"Duración",type:"single_choice",order:1,validation:{required:!0},pricing:{mode:"none",tiers:[]},options:[{key:"4h",label:"4 horas",priceAdjustment:0,available:!0,order:1},{key:"8h",label:"8 horas",priceAdjustment:150,available:!0,order:2},{key:"full",label:"Día completo",priceAdjustment:300,available:!0,order:3}]},{key:"extras",label:"Extras",type:"multiple_choice",order:2,validation:{},pricing:{mode:"none",tiers:[]},options:[{key:"video",label:"Video profesional",priceAdjustment:200,available:!0,order:1},{key:"album",label:"Álbum impreso",priceAdjustment:80,available:!0,order:2},{key:"second",label:"Segundo profesional",priceAdjustment:150,available:!0,order:3}]}]}]}),vn({groups:[{key:"event",title:"Tu evento",order:1,collapsible:!1,fields:[{key:"guests",label:"Número de invitados",type:"number",order:1,unitLabel:"personas",validation:{required:!0,min:1,max:1e3},pricing:{mode:"per_unit",unitPrice:25,tiers:[]},options:[],defaultValue:50},{key:"style",label:"Estilo",type:"single_choice",order:2,validation:{required:!0},pricing:{mode:"none",tiers:[]},options:[{key:"classic",label:"Clásico",priceAdjustment:0,available:!0,order:1},{key:"modern",label:"Moderno",priceAdjustment:100,available:!0,order:2},{key:"rustic",label:"Rústico",priceAdjustment:80,available:!0,order:3}]}]}]}),vn({groups:[{key:"personalization",title:"Personalización",order:1,collapsible:!1,fields:[{key:"inscription",label:"Texto a grabar",type:"text",order:1,placeholder:'Ej. "Feliz cumpleaños mamá"',affectsMessage:!0,validation:{required:!0,maxLength:60},pricing:{mode:"none",tiers:[]},options:[]},{key:"wrapping",label:"Empaque de regalo",type:"boolean",order:2,trueLabel:"Sí, con empaque especial",priceWhenTrue:4,validation:{},pricing:{mode:"none",tiers:[]},options:[]}]}],faqs:[{question:"¿Cuántos caracteres puede tener el grabado?",answer:"Hasta 60 caracteres incluyendo espacios."}]});const D0={primary:"bg-gray-900 text-white hover:bg-gray-800 disabled:bg-gray-400",secondary:"bg-white text-gray-900 border border-gray-300 hover:bg-gray-50",ghost:"bg-transparent text-gray-700 hover:bg-gray-100",brand:"border [background-color:var(--brand-btn-bg)] [color:var(--brand-btn-fg)] [border-color:var(--brand-btn-border)] [border-radius:var(--brand-radius)] hover:opacity-90 disabled:opacity-60"};function Tn({variant:e="primary",className:t="",...n}){const a=e==="brand"?"":"rounded-md";return d.jsx("button",{className:`inline-flex items-center justify-center ${a} px-4 py-2 text-sm font-medium transition disabled:cursor-not-allowed ${D0[e]} ${t}`,...n})}function Pn({className:e="",...t}){return d.jsx("div",{className:`rounded-lg border border-gray-200 bg-white p-5 shadow-sm ${e}`,...t})}const cc={sharp:"0px",rounded:"0.75rem",pill:"1.5rem"};function M0(e){return e.accentColor&&e.accentColor.trim()?e.accentColor:_b(e.primaryColor)}function z0(e){const t=e.primaryColor,n=e.secondaryColor,a=M0(e),i=cc[e.cornerStyle]??cc.rounded,r=e.backgroundStyle==="gradient"?`linear-gradient(135deg, ${t} 0%, ${n} 100%)`:t,o=e.buttonStyle==="outline";return{"--brand-primary":t,"--brand-secondary":n,"--brand-accent":a,"--brand-on-primary":dc(t),"--brand-on-accent":dc(a),"--brand-radius":i,"--brand-hero-bg":r,"--brand-btn-bg":o?"transparent":"var(--brand-primary)","--brand-btn-fg":o?"var(--brand-accent)":"var(--brand-on-primary)","--brand-btn-border":o?"var(--brand-accent)":"transparent"}}function cr({label:e,htmlFor:t,hint:n,error:a,required:i,children:r}){return d.jsxs("div",{className:"flex flex-col gap-1",children:[d.jsxs("label",{htmlFor:t,className:"text-sm font-medium text-gray-700",children:[e,i?d.jsx("span",{className:"text-red-500",children:" *"}):null]}),r,n&&!a?d.jsx("p",{className:"text-xs text-gray-500",children:n}):null,a?d.jsx("p",{className:"text-xs text-red-600",children:a}):null]})}function Ce(e){return{width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,...e}}const ff=e=>d.jsx("svg",{...Ce(e),children:d.jsx("path",{d:"m6 9 6 6 6-6"})}),fl=e=>d.jsx("svg",{...Ce(e),children:d.jsx("path",{d:"m9 18 6-6-6-6"})}),U0=e=>d.jsx("svg",{...Ce(e),children:d.jsx("path",{d:"M3 6h18M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"})}),O0=e=>d.jsx("svg",{...Ce(e),children:d.jsx("path",{d:"M18 6 6 18M6 6l12 12"})}),F0=e=>d.jsxs("svg",{...Ce(e),children:[d.jsx("path",{d:"M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7Z"}),d.jsx("circle",{cx:"12",cy:"12",r:"3"})]}),B0=e=>d.jsxs("svg",{...Ce(e),children:[d.jsx("path",{d:"M17.94 17.94A10.94 10.94 0 0 1 12 19c-6.5 0-10-7-10-7a18.46 18.46 0 0 1 4.06-5.06"}),d.jsx("path",{d:"M9.9 4.24A10.94 10.94 0 0 1 12 4c6.5 0 10 7 10 7a18.5 18.5 0 0 1-2.16 3.19"}),d.jsx("path",{d:"M14.12 14.12a3 3 0 1 1-4.24-4.24"}),d.jsx("path",{d:"M1 1l22 22"})]}),eo=e=>d.jsx("svg",{...Ce(e),children:d.jsx("path",{d:"M20 6 9 17l-5-5"})}),$0=e=>d.jsxs("svg",{...Ce(e),children:[d.jsx("path",{d:"M12 3l1.9 4.6L18.5 9.5 13.9 11.4 12 16l-1.9-4.6L5.5 9.5l4.6-1.9L12 3Z"}),d.jsx("path",{d:"M19 14l.8 2 2 .8-2 .8-.8 2-.8-2-2-.8 2-.8.8-2Z"})]}),H0=e=>d.jsx("svg",{...Ce(e),children:d.jsx("path",{d:"M13 2 4 14h7l-1 8 9-12h-7l1-8Z"})}),V0=e=>d.jsxs("svg",{...Ce(e),children:[d.jsx("path",{d:"M4 2v20l2-1.5L8 22l2-1.5L12 22l2-1.5L16 22l2-1.5L20 22V2l-2 1.5L16 2l-2 1.5L12 2l-2 1.5L8 2 6 3.5 4 2Z"}),d.jsx("path",{d:"M8 8h8M8 12h8M8 16h5"})]}),W0=e=>d.jsx("svg",{...Ce(e),children:d.jsx("path",{d:"M21 11.5a8.38 8.38 0 0 1-8.5 8.5 9.5 9.5 0 0 1-4-.9L3 21l1.9-5.5a8.5 8.5 0 0 1-.9-4A8.38 8.38 0 0 1 12.5 3 8.38 8.38 0 0 1 21 11.5Z"})}),Q0=e=>d.jsx("svg",{...Ce(e),children:d.jsx("path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10Z"})}),Ad=e=>d.jsxs("svg",{...Ce(e),children:[d.jsx("circle",{cx:"12",cy:"12",r:"9"}),d.jsx("path",{d:"M12 7v5l3 2"})]}),G0=e=>d.jsxs("svg",{...Ce(e),children:[d.jsx("path",{d:"M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z"}),d.jsx("circle",{cx:"12",cy:"10",r:"3"})]}),Z0=e=>d.jsxs("svg",{...Ce(e),children:[d.jsx("rect",{x:"3",y:"5",width:"18",height:"14",rx:"2"}),d.jsx("path",{d:"m3 7 9 6 9-6"})]}),Y0=e=>d.jsxs("svg",{...Ce(e),children:[d.jsx("rect",{x:"3",y:"3",width:"18",height:"18",rx:"5"}),d.jsx("circle",{cx:"12",cy:"12",r:"3.5"}),d.jsx("circle",{cx:"17",cy:"7",r:"1",fill:"currentColor",stroke:"none"})]}),K0=e=>d.jsxs("svg",{...Ce(e),children:[d.jsx("rect",{x:"9",y:"9",width:"12",height:"12",rx:"2"}),d.jsx("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]}),gl=e=>d.jsx("svg",{...Ce(e),fill:"currentColor",stroke:"none",children:d.jsx("path",{d:"M12.04 2A9.93 9.93 0 0 0 2.1 11.92a9.82 9.82 0 0 0 1.36 5L2 22l5.23-1.37a9.93 9.93 0 0 0 4.8 1.22h.01A9.93 9.93 0 0 0 22 11.94 9.93 9.93 0 0 0 12.04 2Zm5.8 14.03c-.24.68-1.4 1.3-1.94 1.34-.5.05-.97.23-3.27-.68-2.76-1.09-4.5-3.9-4.64-4.08-.13-.18-1.1-1.47-1.1-2.8 0-1.33.7-1.98.95-2.25.24-.27.53-.34.7-.34.18 0 .35 0 .5.01.16.01.38-.06.59.45.24.59.81 2.03.88 2.18.07.15.12.32.02.5-.09.18-.14.29-.27.45-.14.15-.29.35-.41.47-.14.13-.28.28-.12.55.16.27.72 1.18 1.54 1.91 1.06.94 1.95 1.24 2.22 1.38.27.13.43.11.59-.07.16-.18.68-.79.86-1.06.18-.27.36-.22.6-.13.25.09 1.58.74 1.85.88.27.13.45.2.51.31.07.11.07.63-.17 1.31Z"})});function X0({result:e,labels:t}){const n=(t==null?void 0:t.discount)??"Discount",a=(t==null?void 0:t.tax)??"Tax",i=(t==null?void 0:t.total)??"Total";return d.jsxs("div",{className:"flex flex-col gap-1 text-sm",children:[e.lines.map((r,o)=>d.jsxs("div",{className:"flex justify-between text-gray-700",children:[d.jsx("span",{children:r.label}),d.jsx("span",{children:Fe(r.amount,e.currency)})]},o)),e.discount>0?d.jsxs("div",{className:"flex justify-between text-gray-700",children:[d.jsx("span",{children:n}),d.jsxs("span",{children:["-",Fe(e.discount,e.currency)]})]}):null,e.tax>0?d.jsxs("div",{className:"flex justify-between text-gray-700",children:[d.jsx("span",{children:a}),d.jsx("span",{children:Fe(e.tax,e.currency)})]}):null,d.jsxs("div",{className:"mt-2 flex justify-between border-t border-gray-200 pt-2 text-base font-semibold text-gray-900",children:[d.jsx("span",{children:i}),d.jsx("span",{children:Fe(e.total,e.currency)})]})]})}const ss="rounded-md border border-gray-300 px-3 py-2 text-sm w-full";function ls(e,t){return!e||e===0?"":` (${e>0?"+":"−"}${Fe(Math.abs(e),t)})`}function J0({config:e,currency:t,selections:n,visibleFieldKeys:a,onChange:i,brand:r,labels:o,disabled:s}){const l=[...e.groups].sort((p,f)=>p.order-f.order),u=d.jsx("span",{className:"text-red-500",children:" *"});return d.jsx("div",{className:"flex flex-col gap-6",children:l.map(p=>{const f=[...p.fields].sort((h,x)=>h.order-x.order).filter(h=>a.has(h.key));return f.length===0?null:d.jsxs("section",{className:"flex flex-col gap-4",children:[d.jsxs("div",{children:[d.jsx("h3",{className:"text-sm font-semibold uppercase tracking-wide text-gray-500",children:p.title}),p.description?d.jsx("p",{className:"mt-0.5 text-xs text-gray-400",children:p.description}):null]}),f.map(h=>d.jsx(ex,{field:h,currency:t,value:n[h.key],onChange:x=>i(h.key,x),brand:r,labels:o,disabled:s,requiredMark:u},h.key))]},p.key)})})}function ex({field:e,currency:t,value:n,onChange:a,brand:i,labels:r,disabled:o,requiredMark:s}){var p,f,h,x,k;const l=((p=e.validation)==null?void 0:p.required)??!1;if(e.type==="info")return d.jsx("div",{className:"rounded-md border border-blue-100 bg-blue-50 px-3 py-2 text-sm text-blue-900",children:e.infoText??e.label});const u=d.jsxs("div",{className:"mb-1.5",children:[d.jsx("span",{className:"text-sm font-medium text-gray-700",children:e.label}),l?s:null,e.helperText?d.jsx("p",{className:"mt-0.5 text-xs text-gray-400",children:e.helperText}):null]});if(e.type==="single_choice"){const v=[...e.options].sort((P,g)=>P.order-g.order);return d.jsxs("div",{children:[u,d.jsx("div",{className:"flex flex-wrap gap-2",children:v.map(P=>{const g=n===P.key,m=P.available===!1;return d.jsxs("button",{type:"button",disabled:o||m,onClick:()=>a(P.key),title:P.description??void 0,className:`rounded-md border px-3 py-1.5 text-sm transition disabled:opacity-40 ${g?"border-transparent":"border-gray-300 bg-white text-gray-700 hover:bg-gray-50"}`,style:g?{backgroundColor:(i==null?void 0:i.primary)??"#111827",color:(i==null?void 0:i.onPrimary)??"#ffffff"}:void 0,children:[P.label,ls(P.priceAdjustment,t)]},P.key)})})]})}if(e.type==="multiple_choice"){const v=[...e.options].sort((m,y)=>m.order-y.order),P=Array.isArray(n)?n:[],g=(f=e.validation)==null?void 0:f.maxSelections;return d.jsxs("div",{children:[u,g?d.jsx("p",{className:"mb-1 text-xs text-gray-400",children:r!=null&&r.selectUpTo?r.selectUpTo(g):`Select up to ${g}`}):null,d.jsx("div",{className:"flex flex-col gap-1.5",children:v.map(m=>{const y=P.includes(m.key),b=g!==void 0&&P.length>=g&&!y;return d.jsxs("label",{className:`flex items-center gap-2 text-sm text-gray-700 ${b?"opacity-50":""}`,children:[d.jsx("input",{type:"checkbox",className:"h-4 w-4",checked:y,disabled:o||b||m.available===!1,onChange:j=>a(j.target.checked?[...P,m.key]:P.filter(I=>I!==m.key))}),m.label,ls(m.priceAdjustment,t)]},m.key)})})]})}if(e.type==="boolean")return d.jsxs("label",{className:"flex items-center gap-2 text-sm text-gray-700",children:[d.jsx("input",{type:"checkbox",className:"h-4 w-4",checked:n===!0,disabled:o,onChange:v=>a(v.target.checked)}),e.trueLabel??e.label,ls(e.priceWhenTrue,t)]});if(e.type==="quantity"||e.type==="number"){const v=e.validation??{},P=typeof n=="number"?n:n==null?"":Number(n),g=((h=e.pricing)==null?void 0:h.mode)==="per_unit"&&e.pricing.unitPrice?` · ${Fe(e.pricing.unitPrice,t)}/${e.unitLabel??"unit"}`:"";return d.jsxs("div",{children:[u,d.jsxs("div",{className:"flex items-center gap-2",children:[d.jsx("input",{type:"number",className:`${ss} max-w-[10rem]`,value:P,min:v.min,max:v.max,step:v.step??1,placeholder:e.placeholder??void 0,disabled:o,onChange:m=>a(m.target.value===""?null:Number(m.target.value))}),e.unitLabel?d.jsx("span",{className:"text-sm text-gray-500",children:e.unitLabel}):null,g?d.jsx("span",{className:"text-xs text-gray-400",children:g}):null]})]})}return e.type==="text"?d.jsxs("div",{children:[u,d.jsx("input",{type:"text",className:ss,value:typeof n=="string"?n:"",maxLength:(x=e.validation)==null?void 0:x.maxLength,placeholder:e.placeholder??void 0,disabled:o,onChange:v=>a(v.target.value)})]}):e.type==="textarea"?d.jsxs("div",{children:[u,d.jsx("textarea",{className:ss,rows:3,value:typeof n=="string"?n:"",maxLength:(k=e.validation)==null?void 0:k.maxLength,placeholder:e.placeholder??void 0,disabled:o,onChange:v=>a(v.target.value)})]}):e.type==="file_upload"?d.jsxs("div",{children:[u,d.jsxs("div",{className:"flex items-center gap-2 rounded-md border border-dashed border-gray-300 bg-gray-50 px-3 py-3 text-sm text-gray-400",children:[d.jsx("input",{type:"file",disabled:!0,className:"text-sm"}),d.jsx("span",{className:"rounded bg-gray-200 px-1.5 py-0.5 text-xs text-gray-600",children:(r==null?void 0:r.comingSoon)??"Coming soon"})]})]}):null}function tx({item:e,selections:t,visibleFieldKeys:n,onChange:a,price:i,imageUrl:r,showBreakdown:o=!0,brand:s,priceLabels:l,rendererLabels:u,footer:p,disabledRenderer:f,className:h=""}){var P;const x=(P=e.customization)==null?void 0:P.presentation,k=(x==null?void 0:x.displayTitle)||e.name,v=(l==null?void 0:l.total)??"Total";return d.jsxs(Pn,{className:`flex flex-col gap-5 ${h}`,style:{borderRadius:"var(--brand-radius, 0.5rem)"},children:[d.jsxs("header",{children:[x!=null&&x.badge?d.jsx("span",{className:"mb-1.5 inline-block rounded-full px-2.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide",style:{backgroundColor:(s==null?void 0:s.primary)??"#111827",color:(s==null?void 0:s.onPrimary)??"#ffffff"},children:x.badge}):null,d.jsx("h1",{className:"text-xl font-semibold leading-tight text-gray-900",children:k}),x!=null&&x.displaySubtitle?d.jsx("p",{className:"mt-0.5 text-sm text-gray-500",children:x.displaySubtitle}):null,e.description?d.jsx("p",{className:"mt-1 text-sm text-gray-600",children:e.description}):null,x!=null&&x.instructions?d.jsx("p",{className:"mt-2 rounded-md bg-gray-50 px-3 py-2 text-sm text-gray-600",children:x.instructions}):null]}),d.jsxs("div",{className:"grid gap-x-6 gap-y-5 md:grid-cols-[minmax(0,1fr)_15rem] lg:grid-cols-[minmax(0,1fr)_17rem]",children:[d.jsxs("div",{className:"md:col-start-2 md:row-start-1",children:[r?d.jsx("img",{src:r,alt:k,className:"aspect-square w-full rounded-lg border border-gray-200 bg-white object-cover"}):d.jsx("div",{className:"aspect-square w-full rounded-lg border border-dashed border-gray-200 bg-gray-50"}),x!=null&&x.gallery&&x.gallery.length>0?d.jsx("div",{className:"mt-2 flex gap-2 overflow-x-auto",children:x.gallery.map((g,m)=>d.jsx("img",{src:g,alt:"",className:"h-14 w-14 flex-shrink-0 rounded-md border border-gray-200 object-cover"},m))}):null]}),d.jsx("div",{className:"min-w-0 md:col-start-1 md:row-start-1 md:row-span-2",children:e.customization?d.jsx(J0,{config:e.customization,currency:e.currency,selections:t,visibleFieldKeys:n,onChange:a,brand:s,labels:u,disabled:f}):null}),d.jsxs("div",{className:"flex flex-col gap-3 md:col-start-2 md:row-start-2",children:[i?d.jsx("div",{className:"rounded-lg border border-gray-200 bg-gray-50/70 p-3",children:o?d.jsx(X0,{result:i,labels:l}):d.jsxs("div",{className:"flex items-center justify-between text-base font-semibold text-gray-900",children:[d.jsx("span",{children:v}),d.jsx("span",{children:Fe(i.total,i.currency)})]})}):null,p?d.jsx("div",{children:p}):null]})]})]})}S.forwardRef(function({className:t,showLabel:n="Show password",hideLabel:a="Hide password",...i},r){const[o,s]=S.useState(!1),l=o?B0:F0,u=o?a:n;return d.jsxs("div",{className:"relative w-full",children:[d.jsx("input",{...i,ref:r,type:o?"text":"password",className:t?`w-full ${t}`:"w-full rounded-md border border-gray-300 px-3 py-2 pr-10 text-sm shadow-sm focus:border-gray-900 focus:outline-none focus:ring-1 focus:ring-gray-900"}),d.jsx("button",{type:"button",onClick:()=>s(p=>!p),"aria-label":u,"aria-pressed":o,title:u,tabIndex:0,className:"absolute inset-y-0 right-0 flex items-center px-2.5 text-gray-400 hover:text-gray-700 focus:outline-none focus-visible:ring-1 focus-visible:ring-gray-900 rounded-r-md",children:d.jsx(l,{className:"h-[18px] w-[18px]"})})]})});function nx(e,t){let n=t,a=0;const i=[];for(const r of e)switch(r.type){case"add_fixed":{n=_e(n+r.amount),i.push({label:r.label,amount:_e(r.amount),source:"rule"});break}case"subtract_fixed":{n=_e(n-r.amount),a=_e(a+r.amount),i.push({label:r.label,amount:_e(-r.amount),source:"discount"});break}case"multiply_total":{const o=n;n=_e(n*r.factor);const s=_e(n-o);i.push({label:r.label,amount:s,source:"rule"}),s<0&&(a=_e(a-s));break}}return{total:n,discount:a,lines:i}}function ax(e,t){return t.split(".").reduce((n,a)=>{if(n!=null&&typeof n=="object")return n[a]},e)}function ix(e,t,n){switch(t){case"exists":return e!=null;case"eq":return e===n;case"neq":return e!==n;case"in":return Array.isArray(n)&&n.includes(e);case"gt":return typeof e=="number"&&typeof n=="number"&&e>n;case"gte":return typeof e=="number"&&typeof n=="number"&&e>=n;case"lt":return typeof e=="number"&&typeof n=="number"&&eca(n,t));if("any"in e)return e.any.some(n=>ca(n,t));if("not"in e)return!ca(e.not,t);if("path"in e&&"op"in e){const n=ax(t,e.path);return ix(n,e.op,e.value)}return!1}function Aa(e){const t=e.customization;return t?[...t.groups].sort((n,a)=>n.order-a.order).flatMap(n=>[...n.fields].sort((a,i)=>a.order-i.order)):[]}function Id(e,t){const n=new Set;for(const a of Aa(e))(!a.visibilityCondition||ca(a.visibilityCondition,t))&&n.add(a.key);return n}function gf(e,t,n){const a=Aa(e);if(a.length===0)return t;const i=new Set(a.map(o=>o.key)),r={};for(const[o,s]of Object.entries(t))i.has(o)&&!n.has(o)||(r[o]=s);return r}function rx(e){const t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:null}function ox(e,t,n){const a=[];for(const i of Aa(e)){if(!n.has(i.key)||i.type!=="quantity"&&i.type!=="number")continue;const r=i.pricing;if(!r||r.mode==="none")continue;const o=rx(t[i.key]);if(o===null||o<=0)continue;let s=0;if(r.mode==="per_unit"&&typeof r.unitPrice=="number")s=_e(o*r.unitPrice);else if(r.mode==="tiered"){const u=[...r.tiers].sort((p,f)=>p.minQuantity-f.minQuantity).filter(p=>o>=p.minQuantity).pop();u&&(s=_e(o*u.unitPrice))}if(s===0)continue;const l=i.unitLabel?` ${i.unitLabel}`:"";a.push({label:`${i.label} (${o}${l})`,amount:s,source:"option"})}return a}function hf(e,t){const n=[],a=[...e.optionGroups].sort((i,r)=>i.displayOrder-r.displayOrder);for(const i of a){const r=t[i.key],o=[...i.options].sort((u,p)=>u.displayOrder-p.displayOrder),s=new Map(o.map(u=>[u.key,u])),l=u=>{const p=s.get(u);!p||p.active===!1||n.push({groupKey:i.key,optionKey:p.key,label:p.label,priceDelta:p.priceDelta})};switch(i.selectionType){case"single":typeof r=="string"&&l(r);break;case"multi":Array.isArray(r)&&r.forEach(u=>l(u));break;case"boolean":r===!0&&o.forEach(u=>l(u.key));break}}return n}function sx(e){const{item:t}=e,n=e.quantity&&e.quantity>0?e.quantity:1,a=e.selections??{},i={selections:a,quantity:n,item:{id:t.id,slug:t.slug,basePrice:t.basePrice,currency:t.currency}},r=Id(t,i),o=gf(t,a,r),s=hf(t,o),l=[],u=_e(t.basePrice*n);l.push({label:n>1?`${t.name} (base x${n})`:`${t.name} (base)`,amount:u,source:"base_price"});for(const m of s)m.priceDelta!==0&&l.push({label:n>1?`${m.label} (x${n})`:m.label,amount:_e(m.priceDelta*n),source:"option"});l.push(...ox(t,o,r));const p=Sb(l.map(m=>m.amount)),f={selections:o,quantity:n,item:{id:t.id,slug:t.slug,basePrice:t.basePrice,currency:t.currency}};let h=p,x=0;const k=[],v=[...t.pricingRules].filter(m=>m.active).sort((m,y)=>m.priority-y.priority);for(const m of v){if(!ca(m.conditions,f))continue;const y=nx(m.effects,h);h=y.total,x=_e(x+y.discount),l.push(...y.lines),k.push({ruleId:m.id,name:m.name,effects:m.effects})}const P=0,g=_e(h);return{currency:t.currency,subtotal:p,discount:x,tax:P,total:g,lines:l,selectedOptionsSnapshot:s,appliedRules:k}}function lx(e,t){const n=new Map;for(const r of e.optionGroups)for(const o of r.options)o.imageUrl&&n.set(`${r.key}:${o.key}`,o.imageUrl);let a=null;for(const r of hf(e,t)){const o=n.get(`${r.groupKey}:${r.optionKey}`);o&&(a=o)}if(a)return a;const i=e.imageConfig;for(const r of i.conditionalImages??[])if(ca(r.when,{selections:t}))return r.imageUrl;return i.defaultImageUrl??null}const mc="es",pc={es:{yes:"Sí",no:"No"},en:{yes:"Yes",no:"No"}};function dx(e,t,n=mc,a){const i=pc[n]??pc[mc],r=new Map;for(const s of t.selectedOptionsSnapshot){const l=r.get(s.groupKey)??[];l.push(s.label),r.set(s.groupKey,l)}if(e.customization&&a){const s=a,l=Id(e,{selections:s,quantity:1,item:{id:e.id,slug:e.slug,basePrice:e.basePrice,currency:e.currency}}),u=[];for(const p of Aa(e)){if(!l.has(p.key))continue;const f=s[p.key];switch(p.type){case"single_choice":case"multiple_choice":{const h=r.get(p.key);h&&h.length>0&&u.push(`${p.label}: ${h.join(", ")}`);break}case"boolean":u.push(`${p.label}: ${f===!0?i.yes:i.no}`);break;case"quantity":case"number":{const h=typeof f=="number"?f:Number(f);Number.isFinite(h)&&h>0&&u.push(`${p.label}: ${h}${p.unitLabel?` ${p.unitLabel}`:""}`);break}case"text":case"textarea":{if(p.affectsMessage===!1)break;typeof f=="string"&&f.trim()&&u.push(`${p.label}: ${f.trim()}`);break}}}return u}const o=[];for(const s of e.optionGroups){const l=r.get(s.key);s.selectionType==="boolean"?o.push(`${s.name}: ${l&&l.length>0?i.yes:i.no}`):l&&l.length>0&&o.push(`${s.name}: ${l.join(", ")}`)}return o}const ux=[{iso:"EC",name:"Ecuador",dialCode:"593",exampleLength:9},{iso:"CO",name:"Colombia",dialCode:"57",exampleLength:10},{iso:"PE",name:"Perú",dialCode:"51",exampleLength:9},{iso:"MX",name:"México",dialCode:"52",exampleLength:10},{iso:"AR",name:"Argentina",dialCode:"54",exampleLength:10},{iso:"CL",name:"Chile",dialCode:"56",exampleLength:9},{iso:"VE",name:"Venezuela",dialCode:"58",exampleLength:10},{iso:"BO",name:"Bolivia",dialCode:"591",exampleLength:8},{iso:"PY",name:"Paraguay",dialCode:"595",exampleLength:9},{iso:"UY",name:"Uruguay",dialCode:"598",exampleLength:8},{iso:"BR",name:"Brasil",dialCode:"55",exampleLength:11},{iso:"PA",name:"Panamá",dialCode:"507",exampleLength:8},{iso:"CR",name:"Costa Rica",dialCode:"506",exampleLength:8},{iso:"GT",name:"Guatemala",dialCode:"502",exampleLength:8},{iso:"HN",name:"Honduras",dialCode:"504",exampleLength:8},{iso:"NI",name:"Nicaragua",dialCode:"505",exampleLength:8},{iso:"SV",name:"El Salvador",dialCode:"503",exampleLength:8},{iso:"DO",name:"República Dominicana",dialCode:"1",exampleLength:10},{iso:"PR",name:"Puerto Rico",dialCode:"1",exampleLength:10},{iso:"CU",name:"Cuba",dialCode:"53",exampleLength:8},{iso:"US",name:"United States",dialCode:"1",exampleLength:10},{iso:"CA",name:"Canada",dialCode:"1",exampleLength:10},{iso:"ES",name:"España",dialCode:"34",exampleLength:9},{iso:"GB",name:"United Kingdom",dialCode:"44",exampleLength:10},{iso:"DE",name:"Deutschland",dialCode:"49",exampleLength:11},{iso:"FR",name:"France",dialCode:"33",exampleLength:9},{iso:"IT",name:"Italia",dialCode:"39",exampleLength:10},{iso:"PT",name:"Portugal",dialCode:"351",exampleLength:9},{iso:"NL",name:"Nederland",dialCode:"31",exampleLength:9},{iso:"BE",name:"België",dialCode:"32",exampleLength:9},{iso:"CH",name:"Schweiz",dialCode:"41",exampleLength:9},{iso:"AT",name:"Österreich",dialCode:"43",exampleLength:10},{iso:"IE",name:"Ireland",dialCode:"353",exampleLength:9},{iso:"AU",name:"Australia",dialCode:"61",exampleLength:9},{iso:"NZ",name:"New Zealand",dialCode:"64",exampleLength:9},{iso:"JP",name:"日本",dialCode:"81",exampleLength:10},{iso:"CN",name:"中国",dialCode:"86",exampleLength:11},{iso:"IN",name:"India",dialCode:"91",exampleLength:10},{iso:"ZA",name:"South Africa",dialCode:"27",exampleLength:9}],Ld=ux,hl="EC";function cx(e){return Ld.find(t=>t.iso===e.toUpperCase())}function mx(e,t){const n=cx(t);if(!n)return{ok:!1,error:"País desconocido"};const a=e.trim().startsWith("+"),i=e.replace(/[^\d]/g,"");if(!i)return{ok:!1,error:"Número vacío"};let r;if(a)r=i;else if(i.startsWith(n.dialCode))r=i;else{const o=i.replace(/^0+/,"");r=n.dialCode+o}return r.length<7||r.length>15?{ok:!1,error:"Longitud inválida"}:{ok:!0,e164:"+"+r}}function px(e){const t=e.replace(/^\+/,"").replace(/\D/g,"");if(!t)return{countryIso:hl,national:""};const n=[...Ld].sort((a,i)=>i.dialCode.length-a.dialCode.length);for(const a of n)if(t.startsWith(a.dialCode))return{countryIso:a.iso,national:t.slice(a.dialCode.length)};return{countryIso:hl,national:t}}function fx({value:e,onChange:t,defaultCountry:n=hl,label:a,required:i,errorText:r}){const[o,s]=S.useState(n),[l,u]=S.useState(""),[p,f]=S.useState(null);S.useEffect(()=>{if(!e){s(n),u("");return}const v=px(e);s(v.countryIso),u(v.national)},[e,n]);function h(v,P){if(!v.trim()){f(null),t("");return}const g=mx(v,P);if(!g.ok){f(g.error);return}f(null),t(g.e164)}const x=r??p,k=d.jsxs(d.Fragment,{children:[d.jsxs("div",{className:"flex gap-2",children:[d.jsx("select",{className:"w-36 shrink-0 rounded-md border border-gray-300 px-2 py-2 text-sm",value:o,onChange:v=>{const P=v.target.value;s(P),h(l,P)},"aria-label":"País",children:Ld.map(v=>d.jsxs("option",{value:v.iso,children:["+",v.dialCode," ",v.name]},v.iso))}),d.jsx("input",{type:"tel",required:i,className:"min-w-0 flex-1 rounded-md border border-gray-300 px-3 py-2 text-sm",value:l,onChange:v=>u(v.target.value),onBlur:()=>h(l,o),placeholder:"991234567"})]}),x&&!a?d.jsx("p",{className:"mt-1 text-xs text-red-600",children:x}):null]});return a?d.jsx(cr,{label:a,required:i,error:x??void 0,children:k}):k}class yl extends Error{constructor(n,a,i,r=[]){super(a);Ii(this,"code");Ii(this,"status");Ii(this,"details");this.name="ApiClientError",this.code=n,this.status=i,this.details=r}}function gx(e,t,n){const a=new URL(t.replace(/^\//,""),e.endsWith("/")?e:`${e}/`);if(n)for(const[i,r]of Object.entries(n))r!==void 0&&a.searchParams.set(i,String(r));return a.toString()}async function $t(e,t,n={}){let a;try{a=await fetch(gx(e,t,n.query),{method:n.method??"GET",headers:{"Content-Type":"application/json",...n.headers??{}},body:n.body!==void 0?JSON.stringify(n.body):void 0})}catch(o){throw new yl("NETWORK_ERROR",o instanceof Error?o.message:"Network request failed.",0)}const i=await a.text(),r=i?JSON.parse(i):void 0;if(!a.ok){const o=r==null?void 0:r.error;throw new yl((o==null?void 0:o.code)??"INTERNAL_ERROR",(o==null?void 0:o.message)??`Request failed with status ${a.status}.`,a.status,(o==null?void 0:o.details)??[])}return r}class hx{constructor(t){this.baseUrl=t}getTenant(t){return $t(this.baseUrl,`/public/tenants/${t}`)}getTenantRouting(t){return $t(this.baseUrl,`/public/tenants/${t}/routing`)}listItems(t){return $t(this.baseUrl,`/public/tenants/${t}/catalog-items`)}getItem(t,n){return $t(this.baseUrl,`/public/tenants/${t}/catalog-items/${n}`)}previewQuote(t,n,a,i=1){return $t(this.baseUrl,`/public/tenants/${t}/catalog-items/${n}/quote-preview`,{method:"POST",body:{quantity:i,selections:a}})}submitQuote(t,n,a){return $t(this.baseUrl,`/public/tenants/${t}/catalog-items/${n}/quotes`,{method:"POST",body:a})}submitCartQuote(t,n){return $t(this.baseUrl,`/public/tenants/${t}/quotes`,{method:"POST",body:n})}listPlans(){return $t(this.baseUrl,"/public/plans")}}const yx="https://api.vendrae.app",nt=new hx(yx),yf=e=>`vendrae:cart:${e}`,fc=[],mr=new Map,vl=new Set;function Sa(e){if(mr.has(e))return mr.get(e);let t=fc;try{const n=localStorage.getItem(yf(e));n&&(t=JSON.parse(n))}catch{t=fc}return mr.set(e,t),t}function To(e,t){mr.set(e,t);try{localStorage.setItem(yf(e),JSON.stringify(t))}catch{}vl.forEach(n=>n())}function vx(){return typeof crypto<"u"&&"randomUUID"in crypto?crypto.randomUUID():`c_${Date.now()}_${Math.random().toString(36).slice(2)}`}function gc(e){return Sa(e)}function bx(e,t){const n=vx();return To(e,[...Sa(e),{...t,id:n}]),n}function vf(e,t,n){To(e,Sa(e).map(a=>a.id===t?{...a,...n}:a))}function xx(e,t,n){const a=Math.max(1,Math.round(n));vf(e,t,{quantity:a})}function Sx(e,t){To(e,Sa(e).filter(n=>n.id!==t))}function wx(e){To(e,[])}function qd(e){var r;const t=S.useSyncExternalStore(o=>(vl.add(o),()=>vl.delete(o)),()=>Sa(e),()=>Sa(e)),n=t.reduce((o,s)=>o+s.quantity,0),a=t.reduce((o,s)=>o+s.pricePreview*s.quantity,0),i=((r=t[0])==null?void 0:r.currency)??"USD";return{items:t,count:n,subtotal:a,currency:i,add:o=>bx(e,o),update:(o,s)=>vf(e,o,s),setQuantity:(o,s)=>xx(e,o,s),remove:o=>Sx(e,o),clear:()=>wx(e)}}function bf({url:e,title:t,text:n,variant:a="subtle",className:i}){const r=ht(),[o,s]=S.useState(!1),l=typeof navigator<"u"&&typeof navigator.share=="function";async function u(){if(l)try{await navigator.share({url:e,title:t,text:n});return}catch(x){const k=x;if((k==null?void 0:k.name)==="AbortError")return}try{await navigator.clipboard.writeText(e),s(!0),setTimeout(()=>s(!1),1500)}catch{}}const p="inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-sm font-medium transition-colors min-h-[36px]",f=a==="subtle"?"bg-white/15 text-white hover:bg-white/25":"border border-gray-300 bg-white text-gray-700 hover:bg-gray-50",h=r(o?"share.copied":l?"share.share":"share.copy");return d.jsxs("button",{type:"button",onClick:u,"aria-label":h,title:h,className:`${p} ${f} ${i??""}`,children:[d.jsx(K0,{className:"h-4 w-4"}),d.jsx("span",{className:"hidden sm:inline",children:h})]})}function pr(e,t){return e?`https://wa.me/${e}`:null}function wa({tenant:e,children:t,wide:n=!1}){var l,u;const a=ht(),{count:i}=qd(e.slug),r=z0(e.branding);S.useEffect(()=>{const p=e.branding.faviconUrl||e.branding.logoUrl;if(!p)return;let f=document.querySelector('link[rel="icon"]');const h=(f==null?void 0:f.getAttribute("href"))??null;return f||(f=document.createElement("link"),f.rel="icon",document.head.appendChild(f)),f.href=p,()=>{f&&h!==null&&(f.href=h)}},[e.branding.faviconUrl,e.branding.logoUrl]);const o=e.branding.whatsappNumber??((u=(l=e.profile)==null?void 0:l.contact)==null?void 0:u.whatsappNumber)??null,s=pr(o);return d.jsxs("div",{style:r,className:"min-h-screen",children:[d.jsx("header",{className:"sticky top-0 z-20 border-b border-gray-200 bg-white/90 backdrop-blur",children:d.jsxs("div",{className:"mx-auto flex max-w-6xl items-center gap-3 px-4 py-3",children:[d.jsx(Re,{to:`/t/${e.slug}`,"aria-label":a("landing.homeLink"),className:"flex items-center gap-3 rounded focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-gray-400",children:e.branding.logoUrl?d.jsx("img",{src:e.branding.logoUrl,alt:e.name,className:"h-10 w-10 rounded"}):d.jsx("div",{className:"flex h-10 w-10 items-center justify-center rounded font-bold",style:{backgroundColor:"var(--brand-primary)",color:"var(--brand-on-primary)"},children:e.name.charAt(0)})}),d.jsx("span",{className:"text-lg font-semibold text-gray-900",children:e.name}),d.jsxs("div",{className:"ml-auto flex items-center gap-2",children:[typeof window<"u"?d.jsx(bf,{variant:"outline",url:`${window.location.origin}/t/${e.slug}`,title:e.name}):null,d.jsx(oy,{})]})]})}),d.jsx("main",{className:n?"":"mx-auto max-w-3xl px-4 py-6",children:t}),i>0&&d.jsxs(Re,{to:`/t/${e.slug}/cart`,"aria-label":a("cart.viewCart"),className:"fixed bottom-20 right-5 z-30 flex h-14 w-14 items-center justify-center rounded-full shadow-lg transition-transform duration-200 hover:scale-105",style:{backgroundColor:"var(--brand-primary)",color:"var(--brand-on-primary)"},children:[d.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,className:"h-6 w-6","aria-hidden":!0,children:[d.jsx("circle",{cx:"9",cy:"20",r:"1.5"}),d.jsx("circle",{cx:"18",cy:"20",r:"1.5"}),d.jsx("path",{d:"M2 3h3l2.4 12.4a2 2 0 0 0 2 1.6h7.7a2 2 0 0 0 2-1.6L22 7H6"})]}),d.jsx("span",{className:"absolute -right-1 -top-1 flex h-5 min-w-5 items-center justify-center rounded-full bg-white px-1 text-xs font-bold text-gray-900 shadow",children:i})]}),s&&d.jsx("a",{href:s,target:"_blank",rel:"noreferrer","aria-label":a("landing.talkWhatsapp"),className:"fixed bottom-5 right-5 z-30 flex h-14 w-14 items-center justify-center rounded-full bg-[#25D366] text-white shadow-lg transition-transform duration-200 hover:scale-105",children:d.jsx(gl,{className:"h-7 w-7"})})]})}const kx={available:"bg-green-50 text-green-700",under_request:"bg-amber-50 text-amber-700",custom_made:"bg-blue-50 text-blue-700",limited:"bg-rose-50 text-rose-700"},Cx={available:"catalog.status.available",under_request:"catalog.status.under_request",custom_made:"catalog.status.custom_made",limited:"catalog.status.limited"};function to({item:e,tenantSlug:t,layout:n="grid"}){const a=ht(),i=`/t/${t}/products/${e.slug}`,r=e.coverImageUrl,o=d.jsx("span",{className:`inline-block rounded-full px-2 py-0.5 text-[11px] font-medium ${kx[e.availabilityStatus]}`,children:a(Cx[e.availabilityStatus])}),s=e.featured?d.jsxs("span",{className:"inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[11px] font-medium",style:{backgroundColor:"color-mix(in srgb, var(--brand-accent) 14%, white)",color:"var(--brand-accent)"},children:["★ ",a("catalog.featured")]}):null,l=d.jsxs("span",{className:"inline-flex items-center gap-1 text-sm font-semibold",style:{color:"var(--brand-accent)"},children:[a("landing.customizeCta"),d.jsx(fl,{className:"h-4 w-4 transition-transform duration-200 group-hover:translate-x-0.5"})]}),u=p=>r?d.jsx("img",{src:r,alt:e.name,className:`${p} object-cover`,loading:"lazy"}):d.jsx("div",{className:`${p} bg-gray-100`});return n==="list"?d.jsxs(Re,{to:i,style:{borderRadius:"var(--brand-radius)"},className:"group flex items-center gap-4 overflow-hidden border border-gray-200 bg-white p-3 shadow-sm transition-shadow duration-200 hover:shadow-md",children:[u("h-20 w-20 flex-shrink-0 rounded-lg"),d.jsxs("div",{className:"min-w-0 flex-1",children:[d.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[d.jsx("h3",{className:"font-semibold text-gray-900",children:e.name}),e.badge?d.jsx("span",{className:"rounded-full px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide",style:{backgroundColor:"var(--brand-primary)",color:"var(--brand-on-primary)"},children:e.badge}):null,s,o]}),e.shortDescription?d.jsx("p",{className:"mt-0.5 line-clamp-1 text-sm text-gray-500",children:e.shortDescription}):null,d.jsx("p",{className:"mt-0.5 text-sm text-gray-500",children:a("landing.from",{price:Fe(e.basePrice,e.currency)})})]}),d.jsx("div",{className:"hidden shrink-0 sm:block",children:l})]}):d.jsxs(Re,{to:i,style:{borderRadius:"var(--brand-radius)"},className:"group flex flex-col overflow-hidden border border-gray-200 bg-white shadow-sm transition-shadow duration-200 hover:shadow-md",children:[d.jsxs("div",{className:"relative",children:[u("aspect-[4/3] w-full"),e.badge?d.jsx("span",{className:"absolute left-3 top-3 rounded-full px-2.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide shadow-sm",style:{backgroundColor:"var(--brand-primary)",color:"var(--brand-on-primary)"},children:e.badge}):null]}),d.jsxs("div",{className:"flex flex-1 flex-col p-5",children:[d.jsxs("div",{className:"mb-2 flex items-center gap-2",children:[e.category?d.jsx("span",{className:"rounded-full bg-gray-100 px-2 py-0.5 text-[11px] font-medium text-gray-600",children:e.category}):null,s,o]}),d.jsx("h3",{className:"font-semibold text-gray-900",children:e.name}),e.shortDescription?d.jsx("p",{className:"mt-1 line-clamp-2 text-sm text-gray-500",children:e.shortDescription}):null,d.jsx("p",{className:"mt-2 text-sm text-gray-500",children:a("landing.from",{price:Fe(e.basePrice,e.currency)})}),d.jsx("div",{className:"mt-4",children:l})]})]})}const Px={sparkles:$0,bolt:H0,receipt:V0,chat:W0,shield:Q0,clock:Ad,check:eo};function $a({title:e,subtitle:t}){return d.jsxs("div",{className:"mx-auto mb-10 max-w-2xl text-center",children:[d.jsx("h2",{className:"text-2xl font-semibold tracking-tight text-gray-900 sm:text-3xl",children:e}),d.jsx("div",{className:"mx-auto mt-3 h-1 w-12 rounded-full",style:{backgroundColor:"var(--brand-accent)"}}),t&&d.jsx("p",{className:"mt-4 text-gray-600",children:t})]})}function _x(e,t){const{featured:n}=e;if(n.mode==="manual"&&n.itemSlugs.length>0){const a=new Map(t.map(i=>[i.slug,i]));return n.itemSlugs.map(i=>a.get(i)).filter(i=>!!i).slice(0,n.limit)}return[...t].sort((a,i)=>Number(i.featured)-Number(a.featured)).slice(0,n.limit)}function jx({tenant:e,landing:t,items:n}){var z,ne,G,be;const a=ht(),i=e.slug,{hero:r,featured:o,howItWorks:s,benefits:l,testimonials:u,faq:p,footer:f}=t,h=e.branding.whatsappNumber??((ne=(z=e.profile)==null?void 0:z.contact)==null?void 0:ne.whatsappNumber)??null,x=r.primaryCtaTarget==="whatsapp"?pr(h):"#catalog",k=r.secondaryCtaTarget==="whatsapp"?pr(h):"#catalog",v=((G=e.profile)==null?void 0:G.contact)??{},P=((be=e.profile)==null?void 0:be.social)??{},g=f.whatsapp||v.whatsappNumber||null,m=f.email||v.email||null,y=f.address||[v.addressLine,v.city,v.country].filter(Boolean).join(", ")||null,b=f.hours||v.businessHours||null;function j(U){if(!U)return null;const te=U.match(/instagram\.com\/([^/?#]+)/i);return te&&te[1]?te[1]:null}const I=f.instagram||j(P.instagramUrl),q=_x(t,n);return d.jsxs("div",{className:"bg-white",children:[d.jsx("section",{className:"relative overflow-hidden",style:{background:"var(--brand-hero-bg)",color:"var(--brand-on-primary)"},children:d.jsxs("div",{className:"mx-auto grid max-w-6xl items-center gap-10 px-4 py-16 sm:py-20 lg:grid-cols-2",children:[d.jsxs("div",{children:[d.jsx("h1",{className:"text-3xl font-bold leading-tight tracking-tight sm:text-4xl lg:text-5xl",style:{color:rs("title",r.textColors)},children:r.title}),r.subtitle&&d.jsx("p",{className:"mt-5 max-w-xl text-base/relaxed opacity-90 sm:text-lg",style:{color:rs("subtitle",r.textColors)},children:r.subtitle}),r.description&&d.jsx("p",{className:"mt-3 max-w-xl text-sm/relaxed opacity-85 sm:text-base",style:{color:rs("description",r.textColors)},children:r.description}),d.jsxs("div",{className:"mt-8 flex flex-wrap gap-3",children:[r.primaryCtaLabel&&x&&d.jsxs("a",{href:x,...r.primaryCtaTarget==="whatsapp"?{target:"_blank",rel:"noreferrer"}:{},style:{borderRadius:"var(--brand-radius)"},className:"inline-flex items-center gap-2 bg-white px-6 py-3 font-semibold text-gray-900 shadow-sm transition-transform duration-200 hover:scale-[1.02]",children:[r.primaryCtaLabel,d.jsx(fl,{className:"h-4 w-4"})]}),r.secondaryCtaLabel&&k&&d.jsxs("a",{href:k,...r.secondaryCtaTarget==="whatsapp"?{target:"_blank",rel:"noreferrer"}:{},style:{borderRadius:"var(--brand-radius)"},className:"inline-flex items-center gap-2 border border-white/40 px-6 py-3 font-semibold transition-colors duration-200 hover:bg-white/10",children:[r.secondaryCtaTarget==="whatsapp"&&d.jsx(gl,{className:"h-5 w-5"}),r.secondaryCtaLabel]})]})]}),r.imageUrl&&d.jsx("div",{className:"relative",children:d.jsx("img",{src:r.imageUrl,alt:r.title||e.name,className:"aspect-[4/3] w-full rounded-2xl object-cover shadow-2xl"})})]})}),d.jsx("section",{id:"catalog",className:"scroll-mt-20 bg-gray-50 py-16 sm:py-20",children:d.jsxs("div",{className:"mx-auto max-w-6xl px-4",children:[d.jsx($a,{title:o.heading||a("landing.heading"),subtitle:o.subheading||void 0}),q.length===0?d.jsx("p",{className:"text-center text-gray-500",children:a("landing.empty")}):d.jsxs(d.Fragment,{children:[d.jsx("div",{className:"grid gap-6 sm:grid-cols-2 lg:grid-cols-3",children:q.map(U=>d.jsx(to,{item:U,tenantSlug:i},U.id))}),d.jsx("div",{className:"mt-8 text-center",children:d.jsxs(Re,{to:`/t/${i}/catalog`,className:"inline-flex items-center gap-1 text-sm font-semibold",style:{color:"var(--brand-accent)"},children:[a("landing.viewAll"),d.jsx(fl,{className:"h-4 w-4"})]})})]})]})}),s.visible&&s.steps.length>0&&d.jsx("section",{className:"py-16 sm:py-20",children:d.jsxs("div",{className:"mx-auto max-w-6xl px-4",children:[d.jsx($a,{title:s.heading}),d.jsx("ol",{className:"grid gap-8 sm:grid-cols-2 lg:grid-cols-4",children:s.steps.map((U,te)=>d.jsxs("li",{className:"text-center",children:[d.jsx("div",{className:"mx-auto flex h-12 w-12 items-center justify-center rounded-full text-lg font-bold",style:{backgroundColor:"var(--brand-primary)",color:"var(--brand-on-primary)"},children:te+1}),d.jsx("h3",{className:"mt-4 font-semibold text-gray-900",children:U.title}),U.description&&d.jsx("p",{className:"mt-1 text-sm text-gray-600",children:U.description})]},te))})]})}),l.visible&&l.items.length>0&&d.jsx("section",{className:"bg-gray-50 py-16 sm:py-20",children:d.jsxs("div",{className:"mx-auto max-w-6xl px-4",children:[d.jsx($a,{title:l.heading}),d.jsx("div",{className:"grid gap-6 sm:grid-cols-2 lg:grid-cols-4",children:l.items.map((U,te)=>{const Pt=Px[U.icon]??eo;return d.jsxs("div",{className:"rounded-xl border border-gray-200 bg-white p-6",children:[d.jsx("div",{className:"flex h-11 w-11 items-center justify-center rounded-lg",style:{backgroundColor:"var(--brand-primary)",color:"var(--brand-on-primary)"},children:d.jsx(Pt,{className:"h-6 w-6"})}),d.jsx("h3",{className:"mt-4 font-semibold text-gray-900",children:U.title}),U.description&&d.jsx("p",{className:"mt-1 text-sm text-gray-600",children:U.description})]},te)})})]})}),u.visible&&u.items.length>0&&d.jsx("section",{className:"py-16 sm:py-20",children:d.jsxs("div",{className:"mx-auto max-w-6xl px-4",children:[d.jsx($a,{title:u.heading}),d.jsx("div",{className:"grid gap-6 sm:grid-cols-2 lg:grid-cols-3",children:u.items.map((U,te)=>d.jsxs("figure",{className:"rounded-xl border border-gray-200 bg-white p-6 shadow-sm",children:[d.jsxs("blockquote",{className:"text-gray-700",children:["“",U.comment,"”"]}),d.jsxs("figcaption",{className:"mt-4 flex items-center gap-3",children:[U.avatarUrl?d.jsx("img",{src:U.avatarUrl,alt:U.name,className:"h-10 w-10 rounded-full object-cover"}):d.jsx("div",{className:"flex h-10 w-10 items-center justify-center rounded-full font-semibold",style:{backgroundColor:"var(--brand-primary)",color:"var(--brand-on-primary)"},children:U.name.charAt(0)}),d.jsx("span",{className:"font-medium text-gray-900",children:U.name})]})]},te))})]})}),p.visible&&p.items.length>0&&d.jsx("section",{className:"bg-gray-50 py-16 sm:py-20",children:d.jsxs("div",{className:"mx-auto max-w-3xl px-4",children:[d.jsx($a,{title:p.heading}),d.jsx("div",{className:"space-y-3",children:p.items.map((U,te)=>d.jsxs("details",{className:"group rounded-xl border border-gray-200 bg-white p-5 [&_svg]:open:rotate-180",children:[d.jsxs("summary",{className:"flex cursor-pointer items-center justify-between gap-3 font-medium text-gray-900 marker:content-['']",children:[U.question,d.jsx(ff,{className:"h-5 w-5 shrink-0 text-gray-400 transition-transform duration-200"})]}),d.jsx("p",{className:"mt-3 text-sm text-gray-600",children:U.answer})]},te))})]})}),d.jsxs("footer",{style:{backgroundColor:f.backgroundColor??"var(--brand-primary)",color:f.textColor??"var(--brand-on-primary)"},children:[f.visible?d.jsxs("div",{className:"mx-auto grid max-w-6xl gap-8 px-4 py-12 sm:grid-cols-2 lg:grid-cols-3",children:[d.jsxs("div",{children:[d.jsxs("div",{className:"flex items-center gap-3",children:[f.logoMode==="text"?d.jsx("span",{className:"text-lg font-semibold",children:e.name}):f.logoMode==="custom"&&f.customLogoUrl?d.jsx("img",{src:f.customLogoUrl,alt:e.name,className:"h-10 w-auto max-w-[160px] rounded bg-white/10 object-contain"}):e.branding.logoUrl?d.jsx("img",{src:e.branding.logoUrl,alt:e.name,className:"h-10 w-10 rounded bg-white/10"}):d.jsx("div",{className:"flex h-10 w-10 items-center justify-center rounded bg-white/15 font-bold",children:e.name.charAt(0)}),f.logoMode!=="text"?d.jsx("span",{className:"text-lg font-semibold",children:e.name}):null]}),f.tagline&&d.jsx("p",{className:"mt-4 max-w-xs text-sm opacity-80",children:f.tagline})]}),f.showContactInfo?d.jsxs("div",{children:[d.jsx("h3",{className:"text-sm font-semibold uppercase tracking-wide opacity-70",children:a("landing.contact")}),d.jsxs("ul",{className:"mt-4 space-y-3 text-sm",children:[g&&d.jsx("li",{children:d.jsxs("a",{href:pr(g)??"#",target:"_blank",rel:"noreferrer",className:"inline-flex items-center gap-2 opacity-90 transition-opacity hover:opacity-100",children:[d.jsx(gl,{className:"h-4 w-4"})," +",g]})}),m&&d.jsx("li",{children:d.jsxs("a",{href:`mailto:${m}`,className:"inline-flex items-center gap-2 opacity-90 transition-opacity hover:opacity-100",children:[d.jsx(Z0,{className:"h-4 w-4"})," ",m]})})]})]}):null,d.jsxs("div",{children:[f.showSocialLinks&&I?d.jsx("ul",{className:"space-y-3 text-sm sm:mt-8 lg:mt-9",children:d.jsx("li",{children:d.jsxs("a",{href:`https://instagram.com/${I.replace(/^@/,"")}`,target:"_blank",rel:"noreferrer",className:"inline-flex items-center gap-2 opacity-90 transition-opacity hover:opacity-100",children:[d.jsx(Y0,{className:"h-4 w-4"})," @",I.replace(/^@/,"")]})})}):null,d.jsxs("ul",{className:"mt-4 space-y-3 text-sm",children:[f.showContactInfo&&y&&d.jsxs("li",{className:"flex items-start gap-2 opacity-90",children:[d.jsx(G0,{className:"mt-0.5 h-4 w-4 shrink-0"})," ",y]}),f.showContactInfo&&b&&d.jsxs("li",{className:"flex items-start gap-2 opacity-90",children:[d.jsx(Ad,{className:"mt-0.5 h-4 w-4 shrink-0"})," ",b]})]})]})]}):null,d.jsx("div",{className:"border-t border-white/15",children:d.jsxs("div",{className:"mx-auto flex max-w-6xl flex-row flex-wrap items-center justify-center gap-x-3 gap-y-1 px-4 py-4 text-center text-xs opacity-70",children:[d.jsxs("span",{children:["© ",new Date().getFullYear()," ",e.name]}),d.jsx("div",{className:"powered-by-vendrae",children:d.jsx("a",{href:"https://vendrae.app",target:"_blank",rel:"noopener noreferrer",className:"opacity-90 hover:opacity-100",children:"Powered by Vendrae"})})]})})]})]})}function _t(e,t,n){const a=`meta[${e}="${t}"]`;let i=document.head.querySelector(a);const r=!i;i||(i=document.createElement("meta"),i.setAttribute(e,t),document.head.appendChild(i));const o=i.getAttribute("content");return n==null||n===""?i.removeAttribute("content"):i.setAttribute("content",n),()=>{if(r){i==null||i.remove();return}o==null?i==null||i.removeAttribute("content"):i==null||i.setAttribute("content",o)}}function On(e){const{title:t,description:n,ogImage:a,ogUrl:i,ogType:r}=e;S.useEffect(()=>{const o=[],s=document.title;return t&&t.trim()&&(document.title=t),n!==void 0&&o.push(_t("name","description",n)),t!==void 0&&(o.push(_t("property","og:title",t||s)),o.push(_t("name","twitter:title",t||s))),n!==void 0&&(o.push(_t("property","og:description",n)),o.push(_t("name","twitter:description",n))),a!==void 0&&(o.push(_t("property","og:image",a??"")),o.push(_t("name","twitter:image",a??""))),r!==void 0&&o.push(_t("property","og:type",r)),o.push(_t("property","og:url",i??(typeof window<"u"?window.location.href:""))),()=>{document.title=s;for(const l of o)l()}},[t,n,a,i,r])}function Tx(){var p,f,h,x,k;const e=ht(),{tenantSlug:t=""}=Ea(),[n,a]=S.useState(null),[i,r]=S.useState([]),[o,s]=S.useState(null),[l,u]=S.useState(!0);return S.useEffect(()=>{let v=!1;return u(!0),Promise.all([nt.getTenant(t),nt.listItems(t)]).then(([P,g])=>{v||(a(P.tenant),r(g.items))}).catch(P=>!v&&s(P.message)).finally(()=>!v&&u(!1)),()=>{v=!0}},[t]),On({title:(n==null?void 0:n.name)??"",description:((f=(p=n==null?void 0:n.landing)==null?void 0:p.hero)==null?void 0:f.subtitle)??"",ogImage:((x=(h=n==null?void 0:n.landing)==null?void 0:h.hero)==null?void 0:x.imageUrl)??(n==null?void 0:n.branding.logoUrl)??null}),l?d.jsx("p",{className:"p-8 text-center text-gray-500",children:e("common.loading")}):o||!n?d.jsx("p",{className:"p-8 text-center text-red-600",children:o??e("common.notFound")}):(k=n.landing)!=null&&k.enabled?d.jsx(wa,{tenant:n,wide:!0,children:d.jsx(jx,{tenant:n,landing:n.landing,items:i})}):d.jsxs(wa,{tenant:n,children:[d.jsx("h1",{className:"mb-4 text-xl font-semibold text-gray-900",children:e("landing.heading")}),i.length===0?d.jsx("p",{className:"text-gray-500",children:e("landing.empty")}):d.jsx("div",{className:"grid gap-4 sm:grid-cols-2",children:i.map(v=>d.jsx(Re,{to:`/t/${t}/items/${v.slug}`,children:d.jsxs(Pn,{className:"h-full transition-shadow hover:shadow-md",children:[d.jsx("h2",{className:"font-medium text-gray-900",children:v.name}),d.jsx("p",{className:"mt-1 text-sm text-gray-500",children:e("landing.from",{price:Fe(v.basePrice,v.currency)})})]})},v.id))})]})}function Ex(){const e=ht(),{tenantSlug:t=""}=Ea(),[n,a]=S.useState(null),[i,r]=S.useState([]),[o,s]=S.useState(null),[l,u]=S.useState(!0),[p,f]=S.useState(null),[h,x]=S.useState("grid");S.useEffect(()=>{let g=!1;return u(!0),Promise.all([nt.getTenant(t),nt.listItems(t)]).then(([m,y])=>{g||(a(m.tenant),r(y.items))}).catch(m=>!g&&s(m.message)).finally(()=>!g&&u(!1)),()=>{g=!0}},[t]);const k=S.useMemo(()=>{const g=new Set,m=[];for(const y of i)y.category&&!g.has(y.category)&&(g.add(y.category),m.push(y.category));return m},[i]);On({title:n?`${e("catalog.title")} · ${n.name}`:e("catalog.title"),description:n?e("seo.catalog.description",{name:n.name}):"",ogImage:(n==null?void 0:n.branding.logoUrl)??null});const v=S.useMemo(()=>[...p?i.filter(m=>m.category===p):i].sort((m,y)=>Number(y.featured)-Number(m.featured)),[i,p]);if(l)return d.jsx("p",{className:"p-8 text-center text-gray-500",children:e("common.loading")});if(o||!n)return d.jsx("p",{className:"p-8 text-center text-red-600",children:o??e("common.notFound")});const P=g=>`rounded-full border px-3.5 py-1.5 text-sm transition-colors ${g?"border-transparent text-[color:var(--brand-on-accent)] [background-color:var(--brand-accent)]":"border-gray-300 bg-white text-gray-700 hover:bg-gray-50"}`;return d.jsx(wa,{tenant:n,wide:!0,children:d.jsxs("div",{className:"mx-auto max-w-6xl px-4 py-8",children:[d.jsxs("div",{className:"mb-6 flex flex-wrap items-end justify-between gap-4",children:[d.jsxs("div",{children:[d.jsx(Re,{to:`/t/${t}`,className:"text-sm text-gray-500 hover:underline",children:e("common.back")}),d.jsx("h1",{className:"mt-1 text-2xl font-semibold tracking-tight text-gray-900 sm:text-3xl",children:e("catalog.title")})]}),d.jsxs("div",{className:"inline-flex gap-1 rounded-md bg-gray-100 p-1",children:[d.jsx("button",{type:"button",onClick:()=>x("grid"),className:`rounded px-3 py-1 text-sm ${h==="grid"?"bg-white font-medium text-gray-900 shadow-sm":"text-gray-500"}`,children:e("catalog.gridView")}),d.jsx("button",{type:"button",onClick:()=>x("list"),className:`rounded px-3 py-1 text-sm ${h==="list"?"bg-white font-medium text-gray-900 shadow-sm":"text-gray-500"}`,children:e("catalog.listView")})]})]}),k.length>0?d.jsxs("div",{className:"mb-6 flex flex-wrap gap-2",children:[d.jsx("button",{type:"button",onClick:()=>f(null),className:P(p===null),children:e("catalog.allCategories")}),k.map(g=>d.jsx("button",{type:"button",onClick:()=>f(g),className:P(p===g),children:g},g))]}):null,v.length===0?d.jsx("p",{className:"text-gray-500",children:e("landing.empty")}):h==="grid"?d.jsx("div",{className:"grid gap-6 sm:grid-cols-2 lg:grid-cols-3",children:v.map(g=>d.jsx(to,{item:g,tenantSlug:t},g.id))}):d.jsx("div",{className:"flex flex-col gap-3",children:v.map(g=>d.jsx(to,{item:g,tenantSlug:t,layout:"list"},g.id))})]})})}const Nx={available:"bg-green-50 text-green-700",under_request:"bg-amber-50 text-amber-700",custom_made:"bg-blue-50 text-blue-700",limited:"bg-rose-50 text-rose-700"};function Yi({title:e,children:t}){return d.jsxs("section",{className:"border-t border-gray-100 py-6",children:[d.jsx("h2",{className:"mb-3 text-lg font-semibold text-gray-900",children:e}),t]})}function Ax(){var j,I,q,z,ne,G,be;const e=ht(),{tenantSlug:t="",itemSlug:n=""}=Ea(),[a,i]=S.useState(null),[r,o]=S.useState(null),[s,l]=S.useState([]),[u,p]=S.useState(null),[f,h]=S.useState(!0),[x,k]=S.useState(null);S.useEffect(()=>{let U=!1;return h(!0),Promise.all([nt.getTenant(t),nt.getItem(t,n),nt.listItems(t)]).then(([te,Pt,Fn])=>{U||(i(te.tenant),o(Pt.item),l(Fn.items),k(null))}).catch(te=>!U&&p(te.message)).finally(()=>!U&&h(!1)),()=>{U=!0}},[t,n]);const v=S.useMemo(()=>s.find(U=>U.slug===n)??null,[s,n]),P=S.useMemo(()=>v!=null&&v.category?s.filter(U=>U.slug!==n&&U.category===v.category).slice(0,3):[],[s,v,n]),g=((I=(j=r==null?void 0:r.customization)==null?void 0:j.presentation)==null?void 0:I.defaultImageUrl)??((q=r==null?void 0:r.imageConfig)==null?void 0:q.defaultImageUrl)??(v==null?void 0:v.coverImageUrl)??(a==null?void 0:a.branding.logoUrl)??null;if(On({title:r&&a?`${r.name} · ${a.name}`:(r==null?void 0:r.name)??(a==null?void 0:a.name)??"",description:(v==null?void 0:v.shortDescription)??(r==null?void 0:r.description)??"",ogImage:g,ogType:"product"}),f)return d.jsx("p",{className:"p-8 text-center text-gray-500",children:e("common.loading")});if(u||!a||!r)return d.jsx("p",{className:"p-8 text-center text-red-600",children:u??e("common.notFound")});const m=(z=r.customization)==null?void 0:z.presentation,y=x??(m==null?void 0:m.defaultImageUrl)??((ne=r.imageConfig)==null?void 0:ne.defaultImageUrl)??(v==null?void 0:v.coverImageUrl)??null,b=Array.from(new Set([m==null?void 0:m.defaultImageUrl,...(m==null?void 0:m.gallery)??[],v==null?void 0:v.coverImageUrl].filter(U=>!!U)));return d.jsx(wa,{tenant:a,wide:!0,children:d.jsxs("div",{className:"mx-auto max-w-5xl px-4 py-8",children:[d.jsx(Re,{to:`/t/${t}/catalog`,className:"text-sm text-gray-500 hover:underline",children:e("common.back")}),d.jsxs("div",{className:"mt-3 grid gap-8 md:grid-cols-2",children:[d.jsxs("div",{children:[d.jsx("div",{className:"overflow-hidden border border-gray-200 bg-white",style:{borderRadius:"var(--brand-radius)"},children:y?d.jsx("img",{src:y,alt:r.name,className:"aspect-square w-full object-cover"}):d.jsx("div",{className:"aspect-square w-full bg-gray-100"})}),b.length>1?d.jsx("div",{className:"mt-3 flex gap-2 overflow-x-auto",children:b.map(U=>d.jsx("button",{type:"button",onClick:()=>k(U),className:`h-16 w-16 flex-shrink-0 overflow-hidden rounded-md border-2 ${U===y?"border-[color:var(--brand-accent)]":"border-transparent"}`,children:d.jsx("img",{src:U,alt:"",className:"h-full w-full object-cover"})},U))}):null]}),d.jsxs("div",{children:[d.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[v!=null&&v.category?d.jsx("span",{className:"rounded-full bg-gray-100 px-2.5 py-0.5 text-xs font-medium text-gray-600",children:v.category}):null,v?d.jsx("span",{className:`rounded-full px-2.5 py-0.5 text-xs font-medium ${Nx[v.availabilityStatus]}`,children:e(`catalog.status.${v.availabilityStatus}`)}):null]}),d.jsx("h1",{className:"mt-2 text-2xl font-bold tracking-tight text-gray-900 sm:text-3xl",children:(m==null?void 0:m.displayTitle)||r.name}),m!=null&&m.displaySubtitle?d.jsx("p",{className:"mt-1 text-gray-500",children:m.displaySubtitle}):null,d.jsx("p",{className:"mt-3 text-xl font-semibold",style:{color:"var(--brand-accent)"},children:e("landing.from",{price:Fe(r.basePrice,r.currency)})}),r.description?d.jsx("p",{className:"mt-4 text-gray-700",children:r.description}):null,m!=null&&m.deliveryTime?d.jsxs("p",{className:"mt-4 inline-flex items-center gap-2 text-sm text-gray-600",children:[d.jsx(Ad,{className:"h-4 w-4"})," ",e("detail.deliveryTime"),": ",m.deliveryTime]}):null,d.jsxs("div",{className:"mt-6 flex flex-wrap items-center gap-3",children:[d.jsx(Re,{to:`/t/${t}/items/${r.slug}`,children:d.jsx(Tn,{variant:"brand",className:"px-6 py-3 text-base font-semibold",children:e("landing.customizeCta")})}),d.jsx(bf,{variant:"outline",url:typeof window<"u"?window.location.href:"",title:r.name,text:(m==null?void 0:m.displaySubtitle)??r.description??void 0})]}),m!=null&&m.benefits&&m.benefits.length>0?d.jsx("ul",{className:"mt-6 space-y-2",children:m.benefits.map((U,te)=>d.jsxs("li",{className:"flex items-start gap-2 text-sm text-gray-700",children:[d.jsx(eo,{className:"mt-0.5 h-4 w-4 flex-shrink-0",style:{color:"var(--brand-accent)"}}),U]},te))}):null]})]}),(G=m==null?void 0:m.included)!=null&&G.length||(be=m==null?void 0:m.notIncluded)!=null&&be.length?d.jsx(Yi,{title:e("detail.included"),children:d.jsxs("div",{className:"grid gap-6 sm:grid-cols-2",children:[d.jsx("ul",{className:"space-y-2",children:((m==null?void 0:m.included)??[]).map((U,te)=>d.jsxs("li",{className:"flex items-start gap-2 text-sm text-gray-700",children:[d.jsx(eo,{className:"mt-0.5 h-4 w-4 flex-shrink-0 text-green-600"}),U]},te))}),m!=null&&m.notIncluded&&m.notIncluded.length>0?d.jsxs("div",{children:[d.jsx("h3",{className:"mb-2 text-sm font-semibold text-gray-500",children:e("detail.notIncluded")}),d.jsx("ul",{className:"space-y-2",children:m.notIncluded.map((U,te)=>d.jsxs("li",{className:"flex items-start gap-2 text-sm text-gray-500",children:[d.jsx(O0,{className:"mt-0.5 h-4 w-4 flex-shrink-0 text-gray-400"}),U]},te))})]}):null]})}):null,m!=null&&m.details?d.jsx(Yi,{title:e("detail.details"),children:d.jsx("p",{className:"text-sm text-gray-700",children:m.details})}):null,m!=null&&m.faqs&&m.faqs.length>0?d.jsx(Yi,{title:e("detail.faq"),children:d.jsx("div",{className:"space-y-3",children:m.faqs.map((U,te)=>d.jsxs("details",{className:"rounded-lg border border-gray-200 bg-white p-4 [&_svg]:open:rotate-180",children:[d.jsxs("summary",{className:"flex cursor-pointer items-center justify-between gap-3 font-medium text-gray-900 marker:content-['']",children:[U.question,d.jsx(ff,{className:"h-5 w-5 shrink-0 text-gray-400 transition-transform duration-200"})]}),d.jsx("p",{className:"mt-2 text-sm text-gray-600",children:U.answer})]},te))})}):null,P.length>0?d.jsx(Yi,{title:e("detail.related"),children:d.jsx("div",{className:"grid gap-6 sm:grid-cols-2 lg:grid-cols-3",children:P.map(U=>d.jsx(to,{item:U,tenantSlug:t},U.id))})}):null]})})}function Ix({response:e,disclaimer:t}){const n=ht(),[a,i]=S.useState(!1);async function r(){try{await navigator.clipboard.writeText(e.message.plainText),i(!0),setTimeout(()=>i(!1),2e3)}catch{i(!1)}}return d.jsxs(Pn,{className:"border-green-200 bg-green-50",children:[d.jsx("h2",{className:"text-lg font-semibold text-gray-900",children:n("confirm.title")}),d.jsx("p",{className:"mt-1 text-sm text-gray-700",children:n("confirm.summary",{number:e.quote.quoteNumber,total:Fe(e.quote.total,e.quote.currency)})}),d.jsx("pre",{className:"mt-3 whitespace-pre-wrap rounded-md border border-gray-200 bg-white p-3 text-xs text-gray-700",children:e.message.plainText}),d.jsxs("div",{className:"mt-4 flex flex-wrap gap-2",children:[d.jsx("a",{href:e.message.whatsappUrl,target:"_blank",rel:"noreferrer",children:d.jsx(Tn,{style:{backgroundColor:"#25D366"},children:n("confirm.openWhatsapp")})}),d.jsx(Tn,{variant:"secondary",onClick:r,children:n(a?"confirm.copied":"confirm.copy")})]}),t?d.jsx("p",{className:"mt-4 border-t border-green-200 pt-3 text-xs italic text-gray-600",children:t}):null]})}const ds="w-full rounded-md border border-gray-300 px-3 py-2 text-sm";function Lx(){var y;const{t:e,lang:t}=bo(),{tenantSlug:n=""}=Ea(),a=qd(n),[i,r]=S.useState(null),[o,s]=S.useState(null),[l,u]=S.useState({name:"",phone:"",email:""}),[p,f]=S.useState(""),[h,x]=S.useState(!1),[k,v]=S.useState(null),[P,g]=S.useState(null);if(S.useEffect(()=>{let b=!1;return nt.getTenant(n).then(j=>!b&&r(j.tenant)).catch(j=>!b&&s(j.message)),()=>{b=!0}},[n]),On({title:i?`${e("cart.title")} · ${i.name}`:e("cart.title")}),o||!i)return d.jsx("p",{className:"p-8 text-center text-red-600",children:o??e("common.loading")});async function m(){if(!l.name.trim()||!l.phone.trim()){v(e("builder.requiredError"));return}v(null),x(!0);try{const b=await nt.submitCartQuote(n,{customer:{name:l.name.trim(),phone:l.phone.trim(),email:l.email.trim()||null},language:t,notes:p.trim()||null,items:a.items.map(j=>({itemSlug:j.itemSlug,quantity:j.quantity,selections:j.selections}))});g(b),a.clear()}catch(b){v(b instanceof yl?b.message:e("builder.submitFailed"))}finally{x(!1)}}return d.jsx(wa,{tenant:i,wide:!0,children:d.jsxs("div",{className:"mx-auto max-w-3xl px-4 py-8",children:[d.jsx(Re,{to:`/t/${n}/catalog`,className:"text-sm text-gray-500 hover:underline",children:e("common.back")}),d.jsx("h1",{className:"mb-5 mt-1 text-2xl font-semibold tracking-tight text-gray-900",children:e("cart.title")}),P?d.jsx(Ix,{response:P,disclaimer:((y=i.profile)==null?void 0:y.quoteDisclaimer)??null}):a.items.length===0?d.jsxs(Pn,{children:[d.jsx("p",{className:"text-gray-500",children:e("cart.empty")}),d.jsxs(Re,{to:`/t/${n}/catalog`,className:"mt-3 inline-block text-sm font-semibold",style:{color:"var(--brand-accent)"},children:[e("landing.viewCatalog")," →"]})]}):d.jsxs("div",{className:"flex flex-col gap-4",children:[d.jsx(Pn,{className:"flex flex-col gap-4 p-0",children:a.items.map((b,j)=>d.jsxs("div",{className:`flex gap-4 p-4 ${j>0?"border-t border-gray-100":""}`,children:[b.image?d.jsx("img",{src:b.image,alt:b.title,className:"h-20 w-20 flex-shrink-0 rounded-lg object-cover"}):d.jsx("div",{className:"h-20 w-20 flex-shrink-0 rounded-lg bg-gray-100"}),d.jsxs("div",{className:"min-w-0 flex-1",children:[d.jsxs("div",{className:"flex items-start justify-between gap-2",children:[d.jsx("h3",{className:"font-medium text-gray-900",children:b.title}),d.jsx("span",{className:"whitespace-nowrap font-semibold text-gray-900",children:Fe(b.pricePreview*b.quantity,b.currency)})]}),b.summaryLines.length>0?d.jsx("ul",{className:"mt-1 space-y-0.5 text-sm text-gray-500",children:b.summaryLines.map((I,q)=>d.jsx("li",{children:I},q))}):null,d.jsxs("div",{className:"mt-2 flex flex-wrap items-center gap-3",children:[d.jsxs("div",{className:"inline-flex items-center rounded-md border border-gray-300",children:[d.jsx("button",{type:"button","aria-label":"-",className:"px-2.5 py-1 text-gray-600 hover:bg-gray-50",onClick:()=>a.setQuantity(b.id,b.quantity-1),children:"−"}),d.jsx("span",{className:"min-w-8 px-2 text-center text-sm",children:b.quantity}),d.jsx("button",{type:"button","aria-label":"+",className:"px-2.5 py-1 text-gray-600 hover:bg-gray-50",onClick:()=>a.setQuantity(b.id,b.quantity+1),children:"+"})]}),d.jsx(Re,{to:`/t/${n}/items/${b.itemSlug}?edit=${b.id}`,className:"text-sm text-gray-500 hover:underline",children:e("cart.edit")}),d.jsxs("button",{type:"button",onClick:()=>a.remove(b.id),className:"inline-flex items-center gap-1 text-sm text-gray-400 hover:text-red-600",children:[d.jsx(U0,{className:"h-4 w-4"}),e("cart.remove")]})]})]})]},b.id))}),d.jsxs(Pn,{className:"flex items-center justify-between",children:[d.jsx("span",{className:"font-medium text-gray-900",children:e("cart.total")}),d.jsx("span",{className:"text-lg font-semibold text-gray-900",children:Fe(a.subtotal,a.currency)})]}),d.jsxs(Pn,{className:"flex flex-col gap-3",children:[d.jsx("h2",{className:"font-medium text-gray-900",children:e("builder.yourDetails")}),d.jsx(cr,{label:e("builder.name"),required:!0,children:d.jsx("input",{className:ds,autoComplete:"name",value:l.name,onChange:b=>u({...l,name:b.target.value})})}),d.jsx(fx,{label:e("builder.phone"),required:!0,value:l.phone,onChange:b=>u({...l,phone:b})}),d.jsx(cr,{label:e("builder.email"),children:d.jsx("input",{className:ds,type:"email",autoComplete:"email",value:l.email,onChange:b=>u({...l,email:b.target.value})})}),d.jsx(cr,{label:e("cart.notes"),children:d.jsx("textarea",{className:ds,rows:2,placeholder:e("cart.notesPlaceholder"),value:p,onChange:b=>f(b.target.value)})}),k?d.jsx("p",{className:"text-sm text-red-600",children:k}):null,d.jsx(Tn,{variant:"brand",onClick:m,disabled:h,className:"w-full",children:e(h?"cart.generating":"cart.generate")})]})]})]})})}function qx(e){var n,a,i;if(e.customization){const r={};for(const o of Aa(e))switch(o.type){case"single_choice":r[o.key]=typeof o.defaultValue=="string"&&o.defaultValue||((n=o.validation)!=null&&n.required?((a=o.options[0])==null?void 0:a.key)??"":"");break;case"multiple_choice":r[o.key]=Array.isArray(o.defaultValue)?o.defaultValue:[];break;case"boolean":r[o.key]=o.defaultValue===!0;break;case"quantity":case"number":r[o.key]=typeof o.defaultValue=="number"?o.defaultValue:((i=o.validation)==null?void 0:i.min)??(o.type==="quantity"?1:0);break;case"text":case"textarea":r[o.key]=typeof o.defaultValue=="string"?o.defaultValue:"";break}return r}const t={};for(const r of e.optionGroups)switch(r.selectionType){case"single":t[r.key]=r.required&&r.options[0]?r.options[0].key:"";break;case"multi":t[r.key]=[];break;case"boolean":t[r.key]=!1;break}return t}function Rx(e,t,n){return{...e,[t]:n}}function Dx(e,t,n){var i,r;if(!e.customization)return[];const a=[];for(const o of Aa(e)){if(!n.has(o.key))continue;const s=((i=o.validation)==null?void 0:i.required)??!1,l=t[o.key];switch(o.type){case"single_choice":s&&(typeof l!="string"||!l)&&a.push(o.label);break;case"multiple_choice":{const u=((r=o.validation)==null?void 0:r.minSelections)??(s?1:0);(Array.isArray(l)?l.length:0){let Ve=!1;return g(!0),Promise.all([nt.getTenant(a),nt.getItem(a,i)]).then(([ot,R])=>{if(Ve)return;u(ot.tenant),f(R.item);const H=o?gc(a).find(Z=>Z.id===o):void 0;x(H?H.selections:qx(R.item))}).catch(ot=>!Ve&&v(ot.message)).finally(()=>!Ve&&g(!1)),()=>{Ve=!0}},[a,i,o]);const I=S.useMemo(()=>p?Id(p,{selections:h,quantity:1,item:{id:p.id,slug:p.slug,basePrice:p.basePrice,currency:p.currency}}):new Set,[p,h]),q=S.useMemo(()=>p?sx({item:p,selections:h,quantity:1}):null,[p,h]),z=S.useMemo(()=>p?lx(p,gf(p,h,I)):null,[p,h,I]);if(On({title:p&&l?`${e("landing.customizeCta")} · ${p.name} · ${l.name}`:(p==null?void 0:p.name)??(l==null?void 0:l.name)??"",description:(p==null?void 0:p.description)??"",ogImage:z??(l==null?void 0:l.branding.logoUrl)??null}),P)return d.jsx("p",{className:"p-8 text-center text-gray-500",children:e("common.loading")});if(k||!l||!p)return d.jsx("p",{className:"p-8 text-center text-red-600",children:k??e("common.notFound")});const ne=((Fn=(Pt=p.customization)==null?void 0:Pt.message)==null?void 0:Fn.includePriceBreakdown)!==!1,G={primary:"var(--brand-primary)",onPrimary:"var(--brand-on-primary)"};function be(){var Z,le,fe;if(!p||!q)return;const Ve=Dx(p,h,I);if(Ve.length>0){y(`${e("builder.requiredError")} (${Ve.join(", ")})`);return}y(null);const ot=((le=(Z=p.customization)==null?void 0:Z.presentation)==null?void 0:le.displayTitle)||p.name,R=dx(p,q,t,h),H={itemSlug:p.slug,catalogItemId:p.id,title:ot,image:z,quantity:o?((fe=gc(a).find(Bn=>Bn.id===o))==null?void 0:fe.quantity)??1:1,selections:h,pricePreview:q.total,currency:q.currency,summaryLines:R};if(o){s.update(o,H),n(`/t/${a}/cart`);return}s.add(H),j(!0)}function U(Ve,ot){x(R=>Rx(R,Ve,ot)),b&&j(!1)}const te=d.jsxs("div",{className:"flex flex-col gap-2",children:[b?d.jsxs(d.Fragment,{children:[d.jsxs("p",{className:"flex items-center gap-1.5 text-sm font-medium text-green-700",children:[d.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,className:"h-4 w-4","aria-hidden":!0,children:d.jsx("path",{d:"M20 6 9 17l-5-5"})}),e("cart.added")]}),d.jsx(Re,{to:`/t/${a}/cart`,children:d.jsxs(Tn,{variant:"brand",className:"w-full",children:[e("cart.viewCart")," (",s.count,")"]})}),d.jsx(Re,{to:`/t/${a}/catalog`,children:d.jsx(Tn,{variant:"secondary",className:"w-full",children:e("cart.continueBrowsing")})})]}):d.jsx(Tn,{variant:"brand",onClick:be,className:"w-full",children:e(o?"cart.update":"cart.addToCart")}),m?d.jsx("p",{className:"text-sm text-red-600",children:m}):null]});return d.jsxs(wa,{tenant:l,children:[d.jsx(Re,{to:`/t/${a}/products/${i}`,className:"text-sm text-gray-500 hover:underline",children:e("common.back")}),d.jsx("div",{className:"mt-3 flex flex-col gap-4",children:d.jsx(tx,{item:p,selections:h,visibleFieldKeys:I,onChange:U,price:q,imageUrl:z,showBreakdown:ne,brand:G,priceLabels:{discount:e("price.discount"),tax:e("price.tax"),total:e("price.total")},footer:te})})]})}function xf(){const e=ht();return On({title:"Vendrae",description:e("notFound.intro")}),d.jsxs("div",{className:"mx-auto flex min-h-screen max-w-xl flex-col items-center justify-center px-4 text-center",children:[d.jsx("h1",{className:"text-2xl font-semibold text-gray-900",children:"Vendrae"}),d.jsx("p",{className:"mt-3 text-gray-600",children:e("notFound.intro")}),d.jsx("code",{className:"mt-3 rounded bg-gray-100 px-3 py-2 text-sm text-gray-800",children:"/t/demo-3d"})]})}function zx(){return"subdomain".trim().toLowerCase()==="subdomain"?"subdomain":"legacy"}const bl={mode:zx(),appBaseDomain:"vendrae.app",legacyBaseUrl:"https://tenant.vendrae.app"};function Ux(e=window.location,t=bl){const n=t.mode==="subdomain"&&Xv(e.hostname,t.appBaseDomain),a=Yv({hostname:e.hostname,pathname:e.pathname},t),i=t.mode==="subdomain"&&!!a&&!n&&e.hostname.toLowerCase()!==`tenant.${t.appBaseDomain.toLowerCase()}`;let r=null;if(t.mode==="subdomain"&&a){const o=Qp(e.pathname);if(i&&o){const s=e.pathname.replace(/^\/t\/[^/]+/,"")||"";r=`/t/${a}${s}`}else if(!/^\/t\//.test(e.pathname)){const s=e.pathname==="/"?"":e.pathname;r=`/t/${a}${s}`}}return{tenantSlug:a,reservedHost:n,rewritePathname:r,onTenantSubdomainHost:i}}function Ox(){const e=ht(),{tenantSlug:t=""}=Ea(),[n,a]=S.useState(null),[i,r]=S.useState("loading");return S.useEffect(()=>{let o=!1;return r("loading"),nt.getTenant(t).then(s=>{if(o)return;const{tenant:l}=s;if(bl.mode==="subdomain"&&l.routing&&!l.routing.tenantSubdomain&&window.location.hostname.toLowerCase()!==`tenant.${bl.appBaseDomain.toLowerCase()}`){window.location.replace(l.routing.legacyPublicUrl);return}a(l),r(l.publicSite.status==="inactive"?"inactive":"active")}).catch(()=>{o||r("not_found")}),()=>{o=!0}},[t]),i==="loading"?d.jsx("p",{className:"p-8 text-center text-gray-500",children:e("common.loading")}):i==="not_found"?d.jsx(xf,{}):i==="inactive"&&n?d.jsx(Bx,{tenant:n}):d.jsx(ev,{})}const Fx={subscription_required:"gated.body.subscriptionRequired",setup_incomplete:"gated.body.setupIncomplete",suspended:"gated.body.suspended"};function Bx({tenant:e}){const t=ht();On({title:e.name,description:t("gated.title")});const n=e.publicSite.reason,a=n?Fx[n]:"gated.body.default",i=e.branding.whatsappNumber,r=i?`https://wa.me/${i}?text=${encodeURIComponent(`Hola, vi tu sitio (${e.name}) — ¿está disponible para hacer un pedido?`)}`:null;return d.jsx("div",{className:"min-h-screen w-full",style:{background:`linear-gradient(135deg, ${e.branding.primaryColor}10, ${e.branding.secondaryColor}10)`},children:d.jsxs("main",{className:"mx-auto flex min-h-screen max-w-xl flex-col items-center justify-center px-4 py-12 text-center",children:[e.branding.logoUrl?d.jsx("img",{src:e.branding.logoUrl,alt:e.name,className:"mb-6 h-20 w-20 rounded-full object-cover ring-1 ring-gray-200",onError:o=>{o.currentTarget.style.display="none"}}):null,d.jsx("h1",{className:"text-2xl font-semibold text-gray-900",children:e.name}),d.jsx("p",{className:"mt-4 text-lg font-medium text-gray-900",children:t("gated.title")}),d.jsx("p",{className:"mt-2 max-w-md text-sm text-gray-600",children:t(a)}),r?d.jsx("a",{href:r,target:"_blank",rel:"noreferrer",className:"mt-6 inline-flex items-center gap-2 rounded-md px-4 py-2 text-sm font-medium text-white shadow-sm transition-opacity hover:opacity-90",style:{backgroundColor:e.branding.primaryColor},children:t("gated.contactWhatsapp")}):null]})})}function $x(){return d.jsx(uv,{children:d.jsxs(nv,{children:[d.jsx(jt,{path:"/",element:d.jsx(xf,{})}),d.jsxs(jt,{path:"/t/:tenantSlug",element:d.jsx(Ox,{}),children:[d.jsx(jt,{index:!0,element:d.jsx(Tx,{})}),d.jsx(jt,{path:"catalog",element:d.jsx(Ex,{})}),d.jsx(jt,{path:"products/:itemSlug",element:d.jsx(Ax,{})}),d.jsx(jt,{path:"cart",element:d.jsx(Lx,{})}),d.jsx(jt,{path:"items/:itemSlug",element:d.jsx(Mx,{})})]}),d.jsx(jt,{path:"*",element:d.jsx(Jy,{to:"/",replace:!0})})]})})}const hc=Ux();hc.rewritePathname&&window.history.replaceState({},"",hc.rewritePathname+window.location.search+window.location.hash);Ep(document.getElementById("root")).render(d.jsx(S.StrictMode,{children:d.jsx(ry,{children:d.jsx($x,{})})}));