vendor: 5,521 bytes, lines 1-9
1var WA=Object.defineProperty;var $A=(e,t,n)=>t in e?WA(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var zn=(e,t,n)=>$A(e,typeof t!="symbol"?t+"":t,n);function YA(e,t){for(var n=0;n<t.length;n++){const a=t[n];if(typeof a!="string"&&!Array.isArray(a)){for(const r in a)if(r!=="default"&&!(r in e)){const s=Object.getOwnPropertyDescriptor(a,r);s&&Object.defineProperty(e,r,s.get?s:{enumerable:!0,get:()=>a[r]})}}}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 r of document.querySelectorAll('link[rel="modulepreload"]'))a(r);new MutationObserver(r=>{for(const s of r)if(s.type==="childList")for(const o of s.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&a(o)}).observe(document,{childList:!0,subtree:!0});function n(r){const s={};return r.integrity&&(s.integrity=r.integrity),r.referrerPolicy&&(s.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?s.credentials="include":r.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function a(r){if(r.ep)return;r.ep=!0;const s=n(r);fetch(r.href,s)}})();var Dl=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function yi(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Yy={exports:{}},Ac={},Gy={exports:{}},ue={};/** 2 * @license React 3 * react.production.min.js 4 * 5 * Copyright (c) Facebook, Inc. and its affiliates. 6 * 7 * This source code is licensed under the MIT license found in the 8 * LICENSE file in the root directory of this source tree. 9 */var eo=Symbol.for("react.element"),GA=Symbol.for("react.portal"),QA=Symbol.for("react.fragment"),KA=Symbol.for("react.strict_mode"),XA=Symbol.for("react.profiler"),ZA=Symbol.for("react.provider"),JA=Symbol.for("react.context"),eC=Symbol.for("react.forward_ref"),tC=Symbol.for("react.suspense"),nC=Symbol.for("react.memo"),aC=Symbol.for("react.lazy"),Nf=Symbol.iterator;function iC(e){return e===null||typeof e!="object"?null:(e=Nf&&e[Nf]||e["@@iterator"],typeof e=="function"?e:null)}var Qy={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Ky=Object.assign,Xy={};function gr(e,t,n){this.props=e,this.context=t,this.refs=Xy,this.updater=n||Qy}gr.prototype.isReactComponent={};gr.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")};gr.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Zy(){}Zy.prototype=gr.prototype;function vp(e,t,n){this.props=e,this.context=t,this.refs=Xy,this.updater=n||Qy}var wp=vp.prototype=new Zy;wp.constructor=vp;Ky(wp,gr.prototype);wp.isPureReactComponent=!0;var Tf=Array.isArray,Jy=Object.prototype.hasOwnProperty,kp={current:null},eb={key:!0,ref:!0,__self:!0,__source:!0};function tb(e,t,n){var a,r={},s=null,o=null;if(t!=null)for(a in t.ref!==void 0&&(o=t.ref),t.key!==void 0&&(s=""+t.key),t)Jy.call(t,a)&&!eb.hasOwnProperty(a)&&(r[a]=t[a]);var l=arguments.length-2;if(l===1)r.children=n;else if(1<l){for(var c=Array(l),u=0;u<l;u++)c[u]=arguments[u+2];r.children=c}if(e&&e.defaultProps)for(a in l=e.defaultProps,l)r[a]===void 0&&(r[a]=l[a]);return{$$typeof:eo,type:e,key:s,ref:o,props:r,_owner:kp.current}}function rC(e,t){return{$$typeof:eo,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}function Ap(e){return typeof e=="object"&&e!==null&&e.$$typeof===eo}function sC(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(n){return t[n]})}var Sf=/\/+/g;function vu(e,t){return typeof e=="object"&&e!==null&&e.key!=null?sC(""+e.key):t.toString(36)}function rl(e,t,n,a,r){var s=typeof e;(s==="undefined"||s==="boolean")&&(e=null);var o=!1;if(e===null)o=!0;else switch(s){case"string":case"number":o=!0;break;case"object":switch(e.$$typeof){case eo:case GA:o=!0}}if(o)return o=e,r=r(o),e=a===""?"."+vu(o,0):a,Tf(r)?(n="",e!=null&&(n=e.replace(Sf,"$&/")+"/"),rl(r,t,n,"",function(u){return u})):r!=null&&(Ap(r)&&(r=rC(r,n+(!r.key||o&&o.key===r.key?"":(""+r.key).replace(Sf,"$&/")+"/")+e)),t.push(r)),1;if(o=0,a=a===""?".":a+":",Tf(e))for(var l=0;l<e.length;l++){s=e[l];var c=a+vu(s,l);o+=rl(s,t,n,c,r)}else if(c=iC(e),typeof c=="function")for(e=c.call(e),l=0;!(s=e.next()).done;)s=s.value,c=a+vu(s,l++),o+=rl(s,t,n,c,r);else if(s==="object")throw t=String(e),Error("Objects are not valid as a React child (found: "+(t==="[object Object]"?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return o}function Co(e,t,n){if(e==null)return e;var a=[],r=0;return rl(e,a,"","",function(s){return t.call(n,s,r++)}),a}function oC(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(n){(e._status===0||e._status===-1)&&(e._status=1,e._result=n)},function(n){(e._status===0||e._status===-1)&&(e._status=2,e._result=n)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var bt={current:null},sl={transition:null},lC={ReactCurrentDispatcher:bt,ReactCurrentBatchConfig:sl,ReactCurrentOwner:kp};function nb(){throw Error("act(...) is not supported in production builds of React.")}
vendor: 6,770 bytes, lines 9-25
9ue.Children={map:Co,forEach:function(e,t,n){Co(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return Co(e,function(){t++}),t},toArray:function(e){return Co(e,function(t){return t})||[]},only:function(e){if(!Ap(e))throw Error("React.Children.only expected to receive a single React element child.");return e}};ue.Component=gr;ue.Fragment=QA;ue.Profiler=XA;ue.PureComponent=vp;ue.StrictMode=KA;ue.Suspense=tC;ue.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=lC;ue.act=nb;ue.cloneElement=function(e,t,n){if(e==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var a=Ky({},e.props),r=e.key,s=e.ref,o=e._owner;if(t!=null){if(t.ref!==void 0&&(s=t.ref,o=kp.current),t.key!==void 0&&(r=""+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(c in t)Jy.call(t,c)&&!eb.hasOwnProperty(c)&&(a[c]=t[c]===void 0&&l!==void 0?l[c]:t[c])}var c=arguments.length-2;if(c===1)a.children=n;else if(1<c){l=Array(c);for(var u=0;u<c;u++)l[u]=arguments[u+2];a.children=l}return{$$typeof:eo,type:e.type,key:r,ref:s,props:a,_owner:o}};ue.createContext=function(e){return e={$$typeof:JA,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null},e.Provider={$$typeof:ZA,_context:e},e.Consumer=e};ue.createElement=tb;ue.createFactory=function(e){var t=tb.bind(null,e);return t.type=e,t};ue.createRef=function(){return{current:null}};ue.forwardRef=function(e){return{$$typeof:eC,render:e}};ue.isValidElement=Ap;ue.lazy=function(e){return{$$typeof:aC,_payload:{_status:-1,_result:e},_init:oC}};ue.memo=function(e,t){return{$$typeof:nC,type:e,compare:t===void 0?null:t}};ue.startTransition=function(e){var t=sl.transition;sl.transition={};try{e()}finally{sl.transition=t}};ue.unstable_act=nb;ue.useCallback=function(e,t){return bt.current.useCallback(e,t)};ue.useContext=function(e){return bt.current.useContext(e)};ue.useDebugValue=function(){};ue.useDeferredValue=function(e){return bt.current.useDeferredValue(e)};ue.useEffect=function(e,t){return bt.current.useEffect(e,t)};ue.useId=function(){return bt.current.useId()};ue.useImperativeHandle=function(e,t,n){return bt.current.useImperativeHandle(e,t,n)};ue.useInsertionEffect=function(e,t){return bt.current.useInsertionEffect(e,t)};ue.useLayoutEffect=function(e,t){return bt.current.useLayoutEffect(e,t)};ue.useMemo=function(e,t){return bt.current.useMemo(e,t)};ue.useReducer=function(e,t,n){return bt.current.useReducer(e,t,n)};ue.useRef=function(e){return bt.current.useRef(e)};ue.useState=function(e){return bt.current.useState(e)};ue.useSyncExternalStore=function(e,t,n){return bt.current.useSyncExternalStore(e,t,n)};ue.useTransition=function(){return bt.current.useTransition()};ue.version="18.3.1";Gy.exports=ue;var T=Gy.exports;const Et=yi(T),cC=YA({__proto__:null,default:Et},[T]);/** 10 * @license React 11 * react-jsx-runtime.production.min.js 12 * 13 * Copyright (c) Facebook, Inc. and its affiliates. 14 * 15 * This source code is licensed under the MIT license found in the 16 * LICENSE file in the root directory of this source tree. 17 */var uC=T,dC=Symbol.for("react.element"),mC=Symbol.for("react.fragment"),pC=Object.prototype.hasOwnProperty,hC=uC.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,fC={key:!0,ref:!0,__self:!0,__source:!0};function ab(e,t,n){var a,r={},s=null,o=null;n!==void 0&&(s=""+n),t.key!==void 0&&(s=""+t.key),t.ref!==void 0&&(o=t.ref);for(a in t)pC.call(t,a)&&!fC.hasOwnProperty(a)&&(r[a]=t[a]);if(e&&e.defaultProps)for(a in t=e.defaultProps,t)r[a]===void 0&&(r[a]=t[a]);return{$$typeof:dC,type:e,key:s,ref:o,props:r,_owner:hC.current}}Ac.Fragment=mC;Ac.jsx=ab;Ac.jsxs=ab;Yy.exports=Ac;var i=Yy.exports,ib={exports:{}},Bt={},rb={exports:{}},sb={};/** 18 * @license React 19 * scheduler.production.min.js 20 * 21 * Copyright (c) Facebook, Inc. and its affiliates. 22 * 23 * This source code is licensed under the MIT license found in the 24 * LICENSE file in the root directory of this source tree. 25 */(function(e){function t(L,U){var A=L.length;L.push(U);e:for(;0<A;){var te=A-1>>>1,ae=L[te];if(0<r(ae,U))L[te]=U,L[A]=ae,A=te;else break e}}function n(L){return L.length===0?null:L[0]}function a(L){if(L.length===0)return null;var U=L[0],A=L.pop();if(A!==U){L[0]=A;e:for(var te=0,ae=L.length,j=ae>>>1;te<j;){var de=2*(te+1)-1,wt=L[de],ye=de+1,pt=L[ye];if(0>r(wt,A))ye<ae&&0>r(pt,wt)?(L[te]=pt,L[ye]=A,te=ye):(L[te]=wt,L[de]=A,te=de);else if(ye<ae&&0>r(pt,A))L[te]=pt,L[ye]=A,te=ye;else break e}}return U}function r(L,U){var A=L.sortIndex-U.sortIndex;return A!==0?A:L.id-U.id}if(typeof performance=="object"&&typeof performance.now=="function"){var s=performance;e.unstable_now=function(){return s.now()}}else{var o=Date,l=o.now();e.unstable_now=function(){return o.now()-l}}var c=[],u=[],d=1,m=null,p=3,f=!1,g=!1,y=!1,w=typeof setTimeout=="function"?setTimeout:null,x=typeof clearTimeout=="function"?clearTimeout:null,b=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function v(L){for(var U=n(u);U!==null;){if(U.callback===null)a(u);else if(U.startTime<=L)a(u),U.sortIndex=U.expirationTime,t(c,U);else break;U=n(u)}}function N(L){if(y=!1,v(L),!g)if(n(c)!==null)g=!0,q(I);else{var U=n(u);U!==null&&F(N,U.startTime-L)}}function I(L,U){g=!1,y&&(y=!1,x(O),O=-1),f=!0;var A=p;try{for(v(U),m=n(c);m!==null&&(!(m.expirationTime>U)||L&&!Y());){var te=m.callback;if(typeof te=="function"){m.callback=null,p=m.priorityLevel;var ae=te(m.expirationTime<=U);U=e.unstable_now(),typeof ae=="function"?m.callback=ae:m===n(c)&&a(c),v(U)}else a(c);m=n(c)}if(m!==null)var j=!0;else{var de=n(u);de!==null&&F(N,de.startTime-U),j=!1}return j}finally{m=null,p=A,f=!1}}var C=!1,R=null,O=-1,H=5,P=-1;function Y(){return!(e.unstable_now()-P<H)}function K(){if(R!==null){var L=e.unstable_now();P=L;var U=!0;try{U=R(!0,L)}finally{U?ie():(C=!1,R=null)}}else C=!1}var ie;if(typeof b=="function")ie=function(){b(K)};else if(typeof MessageChannel<"u"){var B=new MessageChannel,D=B.port2;B.port1.onmessage=K,ie=function(){D.postMessage(null)}}else ie=function(){w(K,0)};function q(L){R=L,C||(C=!0,ie())}function F(L,U){O=w(function(){L(e.unstable_now())},U)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(L){L.callback=null},e.unstable_continueExecution=function(){g||f||(g=!0,q(I))},e.unstable_forceFrameRate=function(L){0>L||125<L?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):H=0<L?Math.floor(1e3/L):
vendor: 13,421 bytes, lines 25-37
255},e.unstable_getCurrentPriorityLevel=function(){return p},e.unstable_getFirstCallbackNode=function(){return n(c)},e.unstable_next=function(L){switch(p){case 1:case 2:case 3:var U=3;break;default:U=p}var A=p;p=U;try{return L()}finally{p=A}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=function(){},e.unstable_runWithPriority=function(L,U){switch(L){case 1:case 2:case 3:case 4:case 5:break;default:L=3}var A=p;p=L;try{return U()}finally{p=A}},e.unstable_scheduleCallback=function(L,U,A){var te=e.unstable_now();switch(typeof A=="object"&&A!==null?(A=A.delay,A=typeof A=="number"&&0<A?te+A:te):A=te,L){case 1:var ae=-1;break;case 2:ae=250;break;case 5:ae=1073741823;break;case 4:ae=1e4;break;default:ae=5e3}return ae=A+ae,L={id:d++,callback:U,priorityLevel:L,startTime:A,expirationTime:ae,sortIndex:-1},A>te?(L.sortIndex=A,t(u,L),n(c)===null&&L===n(u)&&(y?(x(O),O=-1):y=!0,F(N,A-te))):(L.sortIndex=ae,t(c,L),g||f||(g=!0,q(I))),L},e.unstable_shouldYield=Y,e.unstable_wrapCallback=function(L){var U=p;return function(){var A=p;p=U;try{return L.apply(this,arguments)}finally{p=A}}}})(sb);rb.exports=sb;var gC=rb.exports;/** 26 * @license React 27 * react-dom.production.min.js 28 * 29 * Copyright (c) Facebook, Inc. and its affiliates. 30 * 31 * This source code is licensed under the MIT license found in the 32 * LICENSE file in the root directory of this source tree. 33 */var xC=T,zt=gC;function G(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var ob=new Set,Es={};function bi(e,t){ar(e,t),ar(e+"Capture",t)}function ar(e,t){for(Es[e]=t,e=0;e<t.length;e++)ob.add(t[e])}var Gn=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Pd=Object.prototype.hasOwnProperty,yC=/^[: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]*$/,If={},jf={};function bC(e){return Pd.call(jf,e)?!0:Pd.call(If,e)?!1:yC.test(e)?jf[e]=!0:(If[e]=!0,!1)}function vC(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 wC(e,t,n,a){if(t===null||typeof t>"u"||vC(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 vt(e,t,n,a,r,s,o){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=a,this.attributeNamespace=r,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=s,this.removeEmptyString=o}var nt={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){nt[e]=new vt(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];nt[t]=new vt(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){nt[e]=new vt(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){nt[e]=new vt(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){nt[e]=new vt(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){nt[e]=new vt(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){nt[e]=new vt(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){nt[e]=new vt(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){nt[e]=new vt(e,5,!1,e.toLowerCase(),null,!1,!1)});var Cp=/[\-:]([a-z])/g;function Ep(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(Cp,Ep);nt[t]=new vt(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(Cp,Ep);nt[t]=new vt(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(Cp,Ep);nt[t]=new vt(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){nt[e]=new vt(e,1,!1,e.toLowerCase(),null,!1,!1)});nt.xlinkHref=new vt("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){nt[e]=new vt(e,1,!1,e.toLowerCase(),null,!0,!0)});function Np(e,t,n,a){var r=nt.hasOwnProperty(t)?nt[t]:null;(r!==null?r.type!==0:a||!(2<t.length)||t[0]!=="o"&&t[0]!=="O"||t[1]!=="n"&&t[1]!=="N")&&(wC(t,n,r,a)&&(n=null),a||r===null?bC(t)&&(n===null?e.removeAttribute(t):e.setAttribute(t,""+n)):r.mustUseProperty?e[r.propertyName]=n===null?r.type===3?!1:"":n:(t=r.attributeName,a=r.attributeNamespace,n===null?e.removeAttribute(t):(r=r.type,n=r===3||r===4&&n===!0?"":""+n,a?e.setAttributeNS(a,t,n):e.setAttribute(t,n))))}var Jn=xC.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,Eo=Symbol.for("react.element"),Di=Symbol.for("react.portal"),Ri=Symbol.for("react.fragment"),Tp=Symbol.for("react.strict_mode"),Md=Symbol.for("react.profiler"),lb=Symbol.for("react.provider"),cb=Symbol.for("react.context"),Sp=Symbol.for("react.forward_ref"),Dd=Symbol.for("react.suspense"),Rd=Symbol.for("react.suspense_list"),Ip=Symbol.for("react.memo"),da=Symbol.for("react.lazy"),ub=Symbol.for("react.offscreen"),Pf=Symbol.iterator;function Mr(e){return e===null||typeof e!="object"?null:(e=Pf&&e[Pf]||e["@@iterator"],typeof e=="function"?e:null)}var De=Object.assign,wu;function Xr(e){if(wu===void 0)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);wu=t&&t[1]||""}return` 34`+wu+e}var ku=!1;function Au(e,t){if(!e||ku)return"";ku=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(t,[])}catch(u){var a=u}Reflect.construct(e,[],t)}else{try{t.call()}catch(u){a=u}e.call(t.prototype)}else{try{throw Error()}catch(u){a=u}e()}}catch(u){if(u&&a&&typeof u.stack=="string"){for(var r=u.stack.split(` 35`),s=a.stack.split(` 36`),o=r.length-1,l=s.length-1;1<=o&&0<=l&&r[o]!==s[l];)l--;for(;1<=o&&0<=l;o--,l--)if(r[o]!==s[l]){if(o!==1||l!==1)do if(o--,l--,0>l||r[o]!==s[l]){var c=` 37`+r[o].replace(" at new "," at ");return e.displayName&&c.includes("<anonymous>")&&(c=c.replace("<anonymous>",e.displayName)),c}while(1<=o&&0<=l);break}}}finally{ku=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Xr(e):""}function kC(e){switch(e.tag){case 5:return Xr(e.type);case 16:return Xr("Lazy");case 13:return Xr("Suspense");case 19:return Xr("SuspenseList");case 0:case 2:case 15:return e=Au(e.type,!1),e;case 11:return e=Au(e.type.render,!1),e;case 1:return e=Au(e.type,!0),e;default:return""}}function Od(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 Ri:return"Fragment";case Di:return"Portal";case Md:return"Profiler";case Tp:return"StrictMode";case Dd:return"Suspense";case Rd:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case cb:return(e.displayName||"Context")+".Consumer";case lb:return(e._context.displayName||"Context")+".Provider";case Sp:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Ip:return t=e.displayName||null,t!==null?t:Od(e.type)||"Memo";case da:t=e._payload,e=e._init;try{return Od(e(t))}catch{}}return null}function AC(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 Od(t);case 8:return t===Tp?"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 Ia(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function db(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function CC(e){var t=db(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 r=n.get,s=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return r.call(this)},set:function(o){a=""+o,s.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 No(e){e._valueTracker||(e._valueTracker=CC(e))}function mb(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),a="";return e&&(a=db(e)?e.checked?"true":"false":e.value),e=a,e!==n?(t.setValue(e),!0):!1}function Rl(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 _d(e,t){var n=t.checked;return De({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Mf(e,t){var n=t.defaultValue==null?"":t.defaultValue,a=t.checked!=null?t.checked:t.defaultChecked;n=Ia(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 pb(e,t){t=t.checked,t!=null&&Np(e,"checked",t,!1)}function Ld(e,t){pb(e,t);var n=Ia(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")?zd(e,t.type,n):t.hasOwnProperty("defaultValue")&&zd(e,t.type,Ia(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Df(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 zd(e,t,n){(t!=="number"||Rl(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Zr=Array.isArray;function Qi(e,t,n,a){if(e=e.options,t){t={};for(var r=0;r<n.length;r++)t["$"+n[r]]=!0;for(n=0;n<e.length;n++)r=t.hasOwnProperty("$"+e[n].value),e[n].selected!==r&&(e[n].selected=r),r&&a&&(e[n].defaultSelected=!0)}else{for(n=""+Ia(n),t=null,r=0;r<e.length;r++){if(e[r].value===n){e[r].selected=!0,a&&(e[r].defaultSelected=!0);return}t!==null||e[r].disabled||(t=e[r])}t!==null&&(t.selected=!0)}}function qd(e,t){if(t.dangerouslySetInnerHTML!=null)throw Error(G(91));return De({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function Rf(e,t){var n=t.value;if(n==null){if(n=t.children,t=t.defaultValue,n!=null){if(t!=null)throw Error(G(92));
vendor: 12,680 bytes, line 37
37if(Zr(n)){if(1<n.length)throw Error(G(93));n=n[0]}t=n}t==null&&(t=""),n=t}e._wrapperState={initialValue:Ia(n)}}function hb(e,t){var n=Ia(t.value),a=Ia(t.defaultValue);n!=null&&(n=""+n,n!==e.value&&(e.value=n),t.defaultValue==null&&e.defaultValue!==n&&(e.defaultValue=n)),a!=null&&(e.defaultValue=""+a)}function Of(e){var t=e.textContent;t===e._wrapperState.initialValue&&t!==""&&t!==null&&(e.value=t)}function fb(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function Bd(e,t){return e==null||e==="http://www.w3.org/1999/xhtml"?fb(t):e==="http://www.w3.org/2000/svg"&&t==="foreignObject"?"http://www.w3.org/1999/xhtml":e}var To,gb=function(e){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(t,n,a,r){MSApp.execUnsafeLocalFunction(function(){return e(t,n,a,r)})}:e}(function(e,t){if(e.namespaceURI!=="http://www.w3.org/2000/svg"||"innerHTML"in e)e.innerHTML=t;else{for(To=To||document.createElement("div"),To.innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=To.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Ns(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var as={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},EC=["Webkit","ms","Moz","O"];Object.keys(as).forEach(function(e){EC.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),as[t]=as[e]})});function xb(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||as.hasOwnProperty(e)&&as[e]?(""+t).trim():t+"px"}function yb(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var a=n.indexOf("--")===0,r=xb(n,t[n],a);n==="float"&&(n="cssFloat"),a?e.setProperty(n,r):e[n]=r}}var NC=De({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 Fd(e,t){if(t){if(NC[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(G(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(G(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(G(61))}if(t.style!=null&&typeof t.style!="object")throw Error(G(62))}}function Hd(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 Ud=null;function jp(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Vd=null,Ki=null,Xi=null;function _f(e){if(e=ao(e)){if(typeof Vd!="function")throw Error(G(280));var t=e.stateNode;t&&(t=Sc(t),Vd(e.stateNode,e.type,t))}}function bb(e){Ki?Xi?Xi.push(e):Xi=[e]:Ki=e}function vb(){if(Ki){var e=Ki,t=Xi;if(Xi=Ki=null,_f(e),t)for(e=0;e<t.length;e++)_f(t[e])}}function wb(e,t){return e(t)}function kb(){}var Cu=!1;function Ab(e,t,n){if(Cu)return e(t,n);Cu=!0;try{return wb(e,t,n)}finally{Cu=!1,(Ki!==null||Xi!==null)&&(kb(),vb())}}function Ts(e,t){var n=e.stateNode;if(n===null)return null;var a=Sc(n);if(a===null)return null;n=a[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(a=!a.disabled)||(e=e.type,a=!(e==="button"||e==="input"||e==="select"||e==="textarea")),e=!a;break e;default:e=!1}if(e)return null;if(n&&typeof n!="function")throw Error(G(231,t,typeof n));return n}var Wd=!1;if(Gn)try{var Dr={};Object.defineProperty(Dr,"passive",{get:function(){Wd=!0}}),window.addEventListener("test",Dr,Dr),window.removeEventListener("test",Dr,Dr)}catch{Wd=!1}function TC(e,t,n,a,r,s,o,l,c){var u=Array.prototype.slice.call(arguments,3);try{t.apply(n,u)}catch(d){this.onError(d)}}var is=!1,Ol=null,_l=!1,$d=null,SC={onError:function(e){is=!0,Ol=e}};function IC(e,t,n,a,r,s,o,l,c){is=!1,Ol=null,TC.apply(SC,arguments)}function jC(e,t,n,a,r,s,o,l,c){if(IC.apply(this,arguments),is){if(is){var u=Ol;is=!1,Ol=null}else throw Error(G(198));_l||(_l=!0,$d=u)}}function vi(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do t=e,t.flags&4098&&(n=t.return),e=t.return;while(e)}return t.tag===3?n:null}function Cb(e){if(e.tag===13){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function Lf(e){if(vi(e)!==e)throw Error(G(188))}function PC(e){var t=e.alternate;if(!t){if(t=vi(e),t===null)throw Error(G(188));return t!==e?null:e}for(var n=e,a=t;;){var r=n.return;if(r===null)break;var s=r.alternate;if(s===null){if(a=r.return,a!==null){n=a;continue}break}if(r.child===s.child){for(s=r.child;s;){if(s===n)return Lf(r),e;if(s===a)return Lf(r),t;s=s.sibling}throw Error(G(188))}if(n.return!==a.return)n=r,a=s;else{for(var o=!1,l=r.child;l;){if(l===n){o=!0,n=r,a=s;break}if(l===a){o=!0,a=r,n=s;break}l=l.sibling}if(!o){for(l=s.child;l;){if(l===n){o=!0,n=s,a=r;break}if(l===a){o=!0,a=s,n=r;break}l=l.sibling}if(!o)throw Error(G(189))}}if(n.alternate!==a)throw Error(G(190))}if(n.tag!==3)throw Error(G(188));return n.stateNode.current===n?e:t}function Eb(e){return e=PC(e),e!==null?Nb(e):null}function Nb(e){if(e.tag===5||e.tag===6)return e;for(e=e.child;e!==null;){var t=Nb(e);if(t!==null)return t;e=e.sibling}return null}var Tb=zt.unstable_scheduleCallback,zf=zt.unstable_cancelCallback,MC=zt.unstable_shouldYield,DC=zt.unstable_requestPaint,_e=zt.unstable_now,RC=zt.unstable_getCurrentPriorityLevel,Pp=zt.unstable_ImmediatePriority,Sb=zt.unstable_UserBlockingPriority,Ll=zt.unstable_NormalPriority,OC=zt.unstable_LowPriority,Ib=zt.unstable_IdlePriority,Cc=null,Nn=null;function _C(e){if(Nn&&typeof Nn.onCommitFiberRoot=="function")try{Nn.onCommitFiberRoot(Cc,e,void 0,(e.current.flags&128)===128)}catch{}}var un=Math.clz32?Math.clz32:qC,LC=Math.log,zC=Math.LN2;function qC(e){return e>>>=0,e===0?32:31-(LC(e)/zC|0)|0}var So=64,Io=4194304;function Jr(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function zl(e,t){var n=e.pendingLanes;if(n===0)return 0;var a=0,r=e.suspendedLanes,s=e.pingedLanes,o=n&268435455;if(o!==0){var l=o&~r;l!==0?a=Jr(l):(s&=o,s!==0&&(a=Jr(s)))}else o=n&~r,o!==0?a=Jr(o):s!==0&&(a=Jr(s));if(a===0)return 0;if(t!==0&&t!==a&&!(t&r)&&(r=a&-a,s=t&-t,r>=s||r===16&&(s&4194240)!==0))return t;if(a&4&&(a|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=a;0<t;)n=31-un(t),r=1<<n,a|=e[n],t&=~r;return a}function BC(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return-1;case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function FC(e,t){for(var n=e.suspendedLanes,a=e.pingedLanes,r=e.expirationTimes,s=e.pendingLanes;0<s;){var o=31-un(s),l=1<<o,c=r[o];c===-1?(!(l&n)||l&a)&&(r[o]=BC(l,t)):c<=t&&(e.expiredLanes|=l),s&=~l}}function Yd(e){return e=e.pendingLanes&-1073741825,e!==0?e:e&1073741824?1073741824:0}function jb(){var e=So;return So<<=1,!(So&4194240)&&(So=64),e}function Eu(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function to(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-un(t),e[t]=n}function HC(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<n;){var r=31-un(n),s=1<<r;t[r]=0,a[r]=-1,e[r]=-1,n&=~s}}function Mp(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var a=31-un(n),r=1<<a;r&t|e[a]&t&&(e[a]|=t),n&=~r}}var xe=0;function Pb(e){return e&=-e,1<e?4<e?e&268435455?16:536870912:4:1}var Mb,Dp,Db,Rb,Ob,Gd=!1,jo=[],va=null,wa=null,ka=null,Ss=new Map,Is=new Map,pa=[],UC="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function qf(e,t){switch(e){case"focusin":case"focusout":va=null;break;case"dragenter":case"dragleave":wa=null;break;case"mouseover":case"mouseout":ka=null;break;case"pointerover":case"pointerout":Ss.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":Is.delete(t.pointerId)}}function Rr(e,t,n,a,r,s){return e===null||e.nativeEvent!==s?(e={blockedOn:t,domEventName:n,eventSystemFlags:a,nativeEvent:s,targetContainers:[r]},t!==null&&(t=ao(t),t!==null&&Dp(t)),e):(e.eventSystemFlags|=a,t=e.targetContainers,r!==null&&t.indexOf(r)===-1&&t.push(r),e)}function VC(e,t,n,a,r){switch(t){case"focusin":return va=Rr(va,e,t,n,a,r),!0;case"dragenter":return wa=Rr(wa,e,t,n,a,r),!0;case"mouseover":return ka=Rr(ka,e,t,n,a,r),!0;case"pointerover":var s=r.pointerId;return Ss.set(s,Rr(Ss.get(s)||null,e,t,n,a,r)),!0;case"gotpointercapture":return s=r.pointerId,Is.set(s,Rr(Is.get(s)||null,e,t,n,a,r)),!0}return!1}function _b(e){var t=Xa(e.target);if(t!==null){var n=vi(t);if(n!==null){if(t=n.tag,t===13){if(t=Cb(n),t!==null){e.blockedOn=t,Ob(e.priority,function(){Db(n)});return}}else if(t===3&&n.stateNode.current.memoizedState.isDehydrated){e.blockedOn=n.tag===3?n.stateNode.containerInfo:null;return}}}e.blockedOn=null}function ol(e){if(e.blockedOn!==null)return!1;for(var t=e.targetContainers;0<t.length;){var n=Qd(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(n===null){n=e.nativeEvent;var a=new n.constructor(n.type,n);Ud=a,n.target.dispatchEvent(a),Ud=null}else return t=ao(n),t!==null&&Dp(t),e.blockedOn=n,!1;t.shift()}return!0}function Bf(e,t,n){ol(e)&&n.delete(t)}function WC(){Gd=!1,va!==null&&ol(va)&&(va=null),wa!==null&&ol(wa)&&(wa=null),ka!==null&&ol(ka)&&(ka=null),Ss.forEach(Bf),Is.forEach(Bf)}function Or(e,t){e.blockedOn===t&&(e.blockedOn=null,Gd||(Gd=!0,zt.unstable_scheduleCallback(zt.unstable_NormalPriority,WC)))}function js(e){function t(r){return Or(r,e)}if(0<jo.length){Or(jo[0],e);for(var n=1;n<jo.length;n++){var a=jo[n];a.blockedOn===e&&(a.blockedOn=null)}}for(va!==null&&Or(va,e),wa!==null&&Or(wa,e),ka!==null&&Or(ka,e),Ss.forEach(t),Is.forEach(t),n=0;n<pa.length;n++)a=pa[n],a.blockedOn===e&&(a.blockedOn=null);for(;0<pa.length&&(n=pa[0],n.blockedOn===null);)_b(n),n.blockedOn===null&&pa.shift()}var Zi=Jn.ReactCurrentBatchConfig,ql=!0;function $C(e,t,n,a){var r=xe,s=Zi.transition;Zi.transition=null;try{xe=1,Rp(e,t,n,a)}finally{xe=r,Zi.transition=s}}function YC(e,t,n,a){var r=xe,s=Zi.transition;Zi.transition=null;try{xe=4,Rp(e,t,n,a)}finally{xe=r,Zi.transition=s}}function Rp(e,t,n,a){if(ql){var r=Qd(e,t,n,a);if(r===null)Ou(e,t,a,Bl,n),qf(e,a);else if(VC(r,e,t,n,a))a.stopPropagation();else if(qf(e,a),t&4&&-1<UC.indexOf(e)){for(;r!==null;){var s=ao(r);if(s!==null&&Mb(s),s=Qd(e,t,n,a),s===null&&Ou(e,t,a,Bl,n),s===r)break;r=s}r!==null&&a.stopPropagation()}else Ou(e,t,a,null,n)}}var Bl=null;function Qd(e,t,n,a){if(Bl=null,e=jp(a),e=Xa(e),e!==null)if(t=vi(e),t===null)e=null;else if(n=t.tag,n===13){if(e=Cb(t),e!==null)return e;e=null}else if(n===3){if(t.stateNode.current.memoizedState.isDehydrated)return t.tag===3?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return Bl=e,null}
vendor: 10,401 bytes, line 37
37function Lb(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(RC()){case Pp:return 1;case Sb:return 4;case Ll:case OC:return 16;case Ib:return 536870912;default:return 16}default:return 16}}var fa=null,Op=null,ll=null;function zb(){if(ll)return ll;var e,t=Op,n=t.length,a,r="value"in fa?fa.value:fa.textContent,s=r.length;for(e=0;e<n&&t[e]===r[e];e++);var o=n-e;for(a=1;a<=o&&t[n-a]===r[s-a];a++);return ll=r.slice(e,1<a?1-a:void 0)}function cl(e){var t=e.keyCode;return"charCode"in e?(e=e.charCode,e===0&&t===13&&(e=13)):e=t,e===10&&(e=13),32<=e||e===13?e:0}function Po(){return!0}function Ff(){return!1}function Ft(e){function t(n,a,r,s,o){this._reactName=n,this._targetInst=r,this.type=a,this.nativeEvent=s,this.target=o,this.currentTarget=null;for(var l in e)e.hasOwnProperty(l)&&(n=e[l],this[l]=n?n(s):s[l]);return this.isDefaultPrevented=(s.defaultPrevented!=null?s.defaultPrevented:s.returnValue===!1)?Po:Ff,this.isPropagationStopped=Ff,this}return De(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var n=this.nativeEvent;n&&(n.preventDefault?n.preventDefault():typeof n.returnValue!="unknown"&&(n.returnValue=!1),this.isDefaultPrevented=Po)},stopPropagation:function(){var n=this.nativeEvent;n&&(n.stopPropagation?n.stopPropagation():typeof n.cancelBubble!="unknown"&&(n.cancelBubble=!0),this.isPropagationStopped=Po)},persist:function(){},isPersistent:Po}),t}var xr={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},_p=Ft(xr),no=De({},xr,{view:0,detail:0}),GC=Ft(no),Nu,Tu,_r,Ec=De({},no,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Lp,button:0,buttons:0,relatedTarget:function(e){return e.relatedTarget===void 0?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==_r&&(_r&&e.type==="mousemove"?(Nu=e.screenX-_r.screenX,Tu=e.screenY-_r.screenY):Tu=Nu=0,_r=e),Nu)},movementY:function(e){return"movementY"in e?e.movementY:Tu}}),Hf=Ft(Ec),QC=De({},Ec,{dataTransfer:0}),KC=Ft(QC),XC=De({},no,{relatedTarget:0}),Su=Ft(XC),ZC=De({},xr,{animationName:0,elapsedTime:0,pseudoElement:0}),JC=Ft(ZC),eE=De({},xr,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),tE=Ft(eE),nE=De({},xr,{data:0}),Uf=Ft(nE),aE={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},iE={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},rE={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function sE(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):(e=rE[e])?!!t[e]:!1}function Lp(){return sE}var oE=De({},no,{key:function(e){if(e.key){var t=aE[e.key]||e.key;if(t!=="Unidentified")return t}return e.type==="keypress"?(e=cl(e),e===13?"Enter":String.fromCharCode(e)):e.type==="keydown"||e.type==="keyup"?iE[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Lp,charCode:function(e){return e.type==="keypress"?cl(e):0},keyCode:function(e){return e.type==="keydown"||e.type==="keyup"?e.keyCode:0},which:function(e){return e.type==="keypress"?cl(e):e.type==="keydown"||e.type==="keyup"?e.keyCode:0}}),lE=Ft(oE),cE=De({},Ec,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),Vf=Ft(cE),uE=De({},no,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Lp}),dE=Ft(uE),mE=De({},xr,{propertyName:0,elapsedTime:0,pseudoElement:0}),pE=Ft(mE),hE=De({},Ec,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),fE=Ft(hE),gE=[9,13,27,32],zp=Gn&&"CompositionEvent"in window,rs=null;Gn&&"documentMode"in document&&(rs=document.documentMode);var xE=Gn&&"TextEvent"in window&&!rs,qb=Gn&&(!zp||rs&&8<rs&&11>=rs),Wf=" ",$f=!1;function Bb(e,t){switch(e){case"keyup":return gE.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Fb(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Oi=!1;function yE(e,t){switch(e){case"compositionend":return Fb(t);case"keypress":return t.which!==32?null:($f=!0,Wf);case"textInput":return e=t.data,e===Wf&&$f?null:e;default:return null}}function bE(e,t){if(Oi)return e==="compositionend"||!zp&&Bb(e,t)?(e=zb(),ll=Op=fa=null,Oi=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return qb&&t.locale!=="ko"?null:t.data;default:return null}}var vE={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Yf(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t==="input"?!!vE[e.type]:t==="textarea"}function Hb(e,t,n,a){bb(a),t=Fl(t,"onChange"),0<t.length&&(n=new _p("onChange","change",null,n,a),e.push({event:n,listeners:t}))}var ss=null,Ps=null;function wE(e){Jb(e,0)}function Nc(e){var t=zi(e);if(mb(t))return e}function kE(e,t){if(e==="change")return t}var Ub=!1;if(Gn){var Iu;if(Gn){var ju="oninput"in document;if(!ju){var Gf=document.createElement("div");Gf.setAttribute("oninput","return;"),ju=typeof Gf.oninput=="function"}Iu=ju}else Iu=!1;Ub=Iu&&(!document.documentMode||9<document.documentMode)}function Qf(){ss&&(ss.detachEvent("onpropertychange",Vb),Ps=ss=null)}function Vb(e){if(e.propertyName==="value"&&Nc(Ps)){var t=[];Hb(t,Ps,e,jp(e)),Ab(wE,t)}}function AE(e,t,n){e==="focusin"?(Qf(),ss=t,Ps=n,ss.attachEvent("onpropertychange",Vb)):e==="focusout"&&Qf()}function CE(e){if(e==="selectionchange"||e==="keyup"||e==="keydown")return Nc(Ps)}function EE(e,t){if(e==="click")return Nc(t)}function NE(e,t){if(e==="input"||e==="change")return Nc(t)}function TE(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var fn=typeof Object.is=="function"?Object.is:TE;function Ms(e,t){if(fn(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;var n=Object.keys(e),a=Object.keys(t);if(n.length!==a.length)return!1;for(a=0;a<n.length;a++){var r=n[a];if(!Pd.call(t,r)||!fn(e[r],t[r]))return!1}return!0}function Kf(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function Xf(e,t){var n=Kf(e);e=0;for(var a;n;){if(n.nodeType===3){if(a=e+n.textContent.length,e<=t&&a>=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=Kf(n)}}function Wb(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Wb(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function $b(){for(var e=window,t=Rl();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Rl(e.document)}return t}function qp(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 SE(e){var t=$b(),n=e.focusedElem,a=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&Wb(n.ownerDocument.documentElement,n)){if(a!==null&&qp(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 r=n.textContent.length,s=Math.min(a.start,r);a=a.end===void 0?s:Math.min(a.end,r),!e.extend&&s>a&&(r=a,a=s,s=r),r=Xf(n,s);var o=Xf(n,a);r&&o&&(e.rangeCount!==1||e.anchorNode!==r.node||e.anchorOffset!==r.offset||e.focusNode!==o.node||e.focusOffset!==o.offset)&&(t=t.createRange(),t.setStart(r.node,r.offset),e.removeAllRanges(),s>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<t.length;n++)e=t[n],e.element.scrollLeft=e.left,e.element.scrollTop=e.top}}var IE=Gn&&"documentMode"in document&&11>=document.documentMode,_i=null,Kd=null,os=null,Xd=!1;function Zf(e,t,n){var a=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Xd||_i==null||_i!==Rl(a)||(a=_i,"selectionStart"in a&&qp(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focu
vendor: 4,501 bytes, line 37
37sNode:a.focusNode,focusOffset:a.focusOffset}),os&&Ms(os,a)||(os=a,a=Fl(Kd,"onSelect"),0<a.length&&(t=new _p("onSelect","select",null,t,n),e.push({event:t,listeners:a}),t.target=_i)))}function Mo(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var Li={animationend:Mo("Animation","AnimationEnd"),animationiteration:Mo("Animation","AnimationIteration"),animationstart:Mo("Animation","AnimationStart"),transitionend:Mo("Transition","TransitionEnd")},Pu={},Yb={};Gn&&(Yb=document.createElement("div").style,"AnimationEvent"in window||(delete Li.animationend.animation,delete Li.animationiteration.animation,delete Li.animationstart.animation),"TransitionEvent"in window||delete Li.transitionend.transition);function Tc(e){if(Pu[e])return Pu[e];if(!Li[e])return e;var t=Li[e],n;for(n in t)if(t.hasOwnProperty(n)&&n in Yb)return Pu[e]=t[n];return e}var Gb=Tc("animationend"),Qb=Tc("animationiteration"),Kb=Tc("animationstart"),Xb=Tc("transitionend"),Zb=new Map,Jf="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Oa(e,t){Zb.set(e,t),bi(t,[e])}for(var Mu=0;Mu<Jf.length;Mu++){var Du=Jf[Mu],jE=Du.toLowerCase(),PE=Du[0].toUpperCase()+Du.slice(1);Oa(jE,"on"+PE)}Oa(Gb,"onAnimationEnd");Oa(Qb,"onAnimationIteration");Oa(Kb,"onAnimationStart");Oa("dblclick","onDoubleClick");Oa("focusin","onFocus");Oa("focusout","onBlur");Oa(Xb,"onTransitionEnd");ar("onMouseEnter",["mouseout","mouseover"]);ar("onMouseLeave",["mouseout","mouseover"]);ar("onPointerEnter",["pointerout","pointerover"]);ar("onPointerLeave",["pointerout","pointerover"]);bi("onChange","change click focusin focusout input keydown keyup selectionchange".split(" "));bi("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" "));bi("onBeforeInput",["compositionend","keypress","textInput","paste"]);bi("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" "));bi("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" "));bi("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var es="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),ME=new Set("cancel close invalid load scroll toggle".split(" ").concat(es));function eg(e,t,n){var a=e.type||"unknown-event";e.currentTarget=n,jC(a,t,void 0,e),e.currentTarget=null}function Jb(e,t){t=(t&4)!==0;for(var n=0;n<e.length;n++){var a=e[n],r=a.event;a=a.listeners;e:{var s=void 0;if(t)for(var o=a.length-1;0<=o;o--){var l=a[o],c=l.instance,u=l.currentTarget;if(l=l.listener,c!==s&&r.isPropagationStopped())break e;eg(r,l,u),s=c}else for(o=0;o<a.length;o++){if(l=a[o],c=l.instance,u=l.currentTarget,l=l.listener,c!==s&&r.isPropagationStopped())break e;eg(r,l,u),s=c}}}if(_l)throw e=$d,_l=!1,$d=null,e}function Ee(e,t){var n=t[nm];n===void 0&&(n=t[nm]=new Set);var a=e+"__bubble";n.has(a)||(ev(t,e,2,!1),n.add(a))}function Ru(e,t,n){var a=0;t&&(a|=4),ev(n,e,a,t)}var Do="_reactListening"+Math.random().toString(36).slice(2);function Ds(e){if(!e[Do]){e[Do]=!0,ob.forEach(function(n){n!=="selectionchange"&&(ME.has(n)||Ru(n,!1,e),Ru(n,!0,e))});var t=e.nodeType===9?e:e.ownerDocument;t===null||t[Do]||(t[Do]=!0,Ru("selectionchange",!1,t))}}function ev(e,t,n,a){switch(Lb(t)){case 1:var r=$C;break;case 4:r=YC;break;default:r=Rp}n=r.bind(null,t,n,e),r=void 0,!Wd||t!=="touchstart"&&t!=="touchmove"&&t!=="wheel"||(r=!0),a?r!==void 0?e.addEventListener(t,n,{capture:!0,passive:r}):e.addEventListener(t,n,!0):r!==void 0?e.addEventListener(t,n,{passive:r}):e.addEventListener(t,n,!1)}function Ou(e,t,n,a,r){var s=a;if(!(t&1)&&!(t&2)&&a!==null)e:for(;;){if(a===null)return;var o=a.tag;if(o===3||o===4){var l=a.stateNode.containerInfo;
vendor: 4,719 bytes, lines 37-38
37if(l===r||l.nodeType===8&&l.parentNode===r)break;if(o===4)for(o=a.return;o!==null;){var c=o.tag;if((c===3||c===4)&&(c=o.stateNode.containerInfo,c===r||c.nodeType===8&&c.parentNode===r))return;o=o.return}for(;l!==null;){if(o=Xa(l),o===null)return;if(c=o.tag,c===5||c===6){a=s=o;continue e}l=l.parentNode}}a=a.return}Ab(function(){var u=s,d=jp(n),m=[];e:{var p=Zb.get(e);if(p!==void 0){var f=_p,g=e;switch(e){case"keypress":if(cl(n)===0)break e;case"keydown":case"keyup":f=lE;break;case"focusin":g="focus",f=Su;break;case"focusout":g="blur",f=Su;break;case"beforeblur":case"afterblur":f=Su;break;case"click":if(n.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":f=Hf;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":f=KC;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":f=dE;break;case Gb:case Qb:case Kb:f=JC;break;case Xb:f=pE;break;case"scroll":f=GC;break;case"wheel":f=fE;break;case"copy":case"cut":case"paste":f=tE;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":f=Vf}var y=(t&4)!==0,w=!y&&e==="scroll",x=y?p!==null?p+"Capture":null:p;y=[];for(var b=u,v;b!==null;){v=b;var N=v.stateNode;if(v.tag===5&&N!==null&&(v=N,x!==null&&(N=Ts(b,x),N!=null&&y.push(Rs(b,N,v)))),w)break;b=b.return}0<y.length&&(p=new f(p,g,null,n,d),m.push({event:p,listeners:y}))}}if(!(t&7)){e:{if(p=e==="mouseover"||e==="pointerover",f=e==="mouseout"||e==="pointerout",p&&n!==Ud&&(g=n.relatedTarget||n.fromElement)&&(Xa(g)||g[Qn]))break e;if((f||p)&&(p=d.window===d?d:(p=d.ownerDocument)?p.defaultView||p.parentWindow:window,f?(g=n.relatedTarget||n.toElement,f=u,g=g?Xa(g):null,g!==null&&(w=vi(g),g!==w||g.tag!==5&&g.tag!==6)&&(g=null)):(f=null,g=u),f!==g)){if(y=Hf,N="onMouseLeave",x="onMouseEnter",b="mouse",(e==="pointerout"||e==="pointerover")&&(y=Vf,N="onPointerLeave",x="onPointerEnter",b="pointer"),w=f==null?p:zi(f),v=g==null?p:zi(g),p=new y(N,b+"leave",f,n,d),p.target=w,p.relatedTarget=v,N=null,Xa(d)===u&&(y=new y(x,b+"enter",g,n,d),y.target=v,y.relatedTarget=w,N=y),w=N,f&&g)t:{for(y=f,x=g,b=0,v=y;v;v=Ni(v))b++;for(v=0,N=x;N;N=Ni(N))v++;for(;0<b-v;)y=Ni(y),b--;for(;0<v-b;)x=Ni(x),v--;for(;b--;){if(y===x||x!==null&&y===x.alternate)break t;y=Ni(y),x=Ni(x)}y=null}else y=null;f!==null&&tg(m,p,f,y,!1),g!==null&&w!==null&&tg(m,w,g,y,!0)}}e:{if(p=u?zi(u):window,f=p.nodeName&&p.nodeName.toLowerCase(),f==="select"||f==="input"&&p.type==="file")var I=kE;else if(Yf(p))if(Ub)I=NE;else{I=CE;var C=AE}else(f=p.nodeName)&&f.toLowerCase()==="input"&&(p.type==="checkbox"||p.type==="radio")&&(I=EE);if(I&&(I=I(e,u))){Hb(m,I,n,d);break e}C&&C(e,p,u),e==="focusout"&&(C=p._wrapperState)&&C.controlled&&p.type==="number"&&zd(p,"number",p.value)}switch(C=u?zi(u):window,e){case"focusin":(Yf(C)||C.contentEditable==="true")&&(_i=C,Kd=u,os=null);break;case"focusout":os=Kd=_i=null;break;case"mousedown":Xd=!0;break;case"contextmenu":case"mouseup":case"dragend":Xd=!1,Zf(m,n,d);break;case"selectionchange":if(IE)break;case"keydown":case"keyup":Zf(m,n,d)}var R;if(zp)e:{switch(e){case"compositionstart":var O="onCompositionStart";break e;case"compositionend":O="onCompositionEnd";break e;case"compositionupdate":O="onCompositionUpdate";break e}O=void 0}else Oi?Bb(e,n)&&(O="onCompositionEnd"):e==="keydown"&&n.keyCode===229&&(O="onCompositionStart");O&&(qb&&n.locale!=="ko"&&(Oi||O!=="onCompositionStart"?O==="onCompositionEnd"&&Oi&&(R=zb()):(fa=d,Op="value"in fa?fa.value:fa.textContent,Oi=!0)),C=Fl(u,O),0<C.length&&(O=new Uf(O,e,null,n,d),m.push({event:O,listeners:C}),R?O.data=R:(R=Fb(n),R!==null&&(O.data=R)))),(R=xE?yE(e,n):bE(e,n))&&(u=Fl(u,"onBeforeInput"),0<u.length&&(d=new Uf("onBeforeInput","beforeinput",null,n,d),m.push({event:d,listeners:u}),d.data=R))}Jb(m,t)})}function Rs(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Fl(e,t){for(var n=t+"Capture",a=[];e!==null;){var r=e,s=r.stateNode;r.tag===5&&s!==null&&(r=s,s=Ts(e,n),s!=null&&a.unshift(Rs(e,s,r)),s=Ts(e,t),s!=null&&a.push(Rs(e,s,r))),e=e.return}return a}function Ni(e){if(e===null)return null;do e=e.return;while(e&&e.tag!==5);return e||null}function tg(e,t,n,a,r){for(var s=t._reactName,o=[];n!==null&&n!==a;){var l=n,c=l.alternate,u=l.stateNode;if(c!==null&&c===a)break;l.tag===5&&u!==null&&(l=u,r?(c=Ts(n,s),c!=null&&o.unshift(Rs(n,c,l))):r||(c=Ts(n,s),c!=null&&o.push(Rs(n,c,l)))),n=n.return}o.length!==0&&e.push({event:t,listeners:o})}var DE=/\r\n?/g,RE=/\u0000|\uFFFD/g;function ng(e){return(typeof e=="string"?e:""+e).replace(DE,` 38`).replace(RE,"")}
vendor: 4,180 bytes, line 38
38function Ro(e,t,n){if(t=ng(t),ng(e)!==t&&n)throw Error(G(425))}function Hl(){}var Zd=null,Jd=null;function em(e,t){return e==="textarea"||e==="noscript"||typeof t.children=="string"||typeof t.children=="number"||typeof t.dangerouslySetInnerHTML=="object"&&t.dangerouslySetInnerHTML!==null&&t.dangerouslySetInnerHTML.__html!=null}var tm=typeof setTimeout=="function"?setTimeout:void 0,OE=typeof clearTimeout=="function"?clearTimeout:void 0,ag=typeof Promise=="function"?Promise:void 0,_E=typeof queueMicrotask=="function"?queueMicrotask:typeof ag<"u"?function(e){return ag.resolve(null).then(e).catch(LE)}:tm;function LE(e){setTimeout(function(){throw e})}function _u(e,t){var n=t,a=0;do{var r=n.nextSibling;if(e.removeChild(n),r&&r.nodeType===8)if(n=r.data,n==="/$"){if(a===0){e.removeChild(r),js(t);return}a--}else n!=="$"&&n!=="$?"&&n!=="$!"||a++;n=r}while(n);js(t)}function Aa(e){for(;e!=null;e=e.nextSibling){var t=e.nodeType;if(t===1||t===3)break;if(t===8){if(t=e.data,t==="$"||t==="$!"||t==="$?")break;if(t==="/$")return null}}return e}function ig(e){e=e.previousSibling;for(var t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="$"||n==="$!"||n==="$?"){if(t===0)return e;t--}else n==="/$"&&t++}e=e.previousSibling}return null}var yr=Math.random().toString(36).slice(2),En="__reactFiber$"+yr,Os="__reactProps$"+yr,Qn="__reactContainer$"+yr,nm="__reactEvents$"+yr,zE="__reactListeners$"+yr,qE="__reactHandles$"+yr;function Xa(e){var t=e[En];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Qn]||n[En]){if(n=t.alternate,t.child!==null||n!==null&&n.child!==null)for(e=ig(e);e!==null;){if(n=e[En])return n;e=ig(e)}return t}e=n,n=e.parentNode}return null}function ao(e){return e=e[En]||e[Qn],!e||e.tag!==5&&e.tag!==6&&e.tag!==13&&e.tag!==3?null:e}function zi(e){if(e.tag===5||e.tag===6)return e.stateNode;throw Error(G(33))}function Sc(e){return e[Os]||null}var am=[],qi=-1;function _a(e){return{current:e}}function Te(e){0>qi||(e.current=am[qi],am[qi]=null,qi--)}function Ce(e,t){qi++,am[qi]=e.current,e.current=t}var ja={},ct=_a(ja),Tt=_a(!1),ui=ja;function ir(e,t){var n=e.type.contextTypes;if(!n)return ja;var a=e.stateNode;if(a&&a.__reactInternalMemoizedUnmaskedChildContext===t)return a.__reactInternalMemoizedMaskedChildContext;var r={},s;for(s in n)r[s]=t[s];return a&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=r),r}function St(e){return e=e.childContextTypes,e!=null}function Ul(){Te(Tt),Te(ct)}function rg(e,t,n){if(ct.current!==ja)throw Error(G(168));Ce(ct,t),Ce(Tt,n)}function tv(e,t,n){var a=e.stateNode;if(t=t.childContextTypes,typeof a.getChildContext!="function")return n;a=a.getChildContext();for(var r in a)if(!(r in t))throw Error(G(108,AC(e)||"Unknown",r));return De({},n,a)}function Vl(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||ja,ui=ct.current,Ce(ct,e),Ce(Tt,Tt.current),!0}function sg(e,t,n){var a=e.stateNode;if(!a)throw Error(G(169));n?(e=tv(e,t,ui),a.__reactInternalMemoizedMergedChildContext=e,Te(Tt),Te(ct),Ce(ct,e)):Te(Tt),Ce(Tt,n)}var Hn=null,Ic=!1,Lu=!1;function nv(e){Hn===null?Hn=[e]:Hn.push(e)}function BE(e){Ic=!0,nv(e)}function La(){if(!Lu&&Hn!==null){Lu=!0;var e=0,t=xe;try{var n=Hn;for(xe=1;e<n.length;e++){var a=n[e];do a=a(!0);while(a!==null)}Hn=null,Ic=!1}catch(r){throw Hn!==null&&(Hn=Hn.slice(e+1)),Tb(Pp,La),r}finally{xe=t,Lu=!1}}return null}var Bi=[],Fi=0,Wl=null,$l=0,Ut=[],Vt=0,di=null,Wn=1,$n="";function $a(e,t){Bi[Fi++]=$l,Bi[Fi++]=Wl,Wl=e,$l=t}function av(e,t,n){Ut[Vt++]=Wn,Ut[Vt++]=$n,Ut[Vt++]=di,di=e;var a=Wn;e=$n;var r=32-un(a)-1;a&=~(1<<r),n+=1;var s=32-un(t)+r;if(30<s){var o=r-r%5;s=(a&(1<<o)-1).toString(32),a>>=o,r-=o,Wn=1<<32-un(t)+r|n<<r|a,$n=s+e}else Wn=1<<s|n<<r|a,$n=e}function Bp(e){e.return!==null&&($a(e,1),av(e,1,0))}function Fp(e){for(;e===Wl;)Wl=Bi[--Fi],Bi[Fi]=null,$l=Bi[--Fi],Bi[Fi]=null;for(;e===di;)di=Ut[--Vt],Ut[Vt]=null,$n=Ut[--Vt],Ut[Vt]=null,Wn=Ut[--Vt],Ut[Vt]=null}var Ot=null,Rt=null,je=!1,ln=null;function iv(e,t){var n=Yt(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,t=e.deletions,t===null?(e.deletions=[n],e.flags|=16):t.push(n)}function og(e,t){switch(e.tag){case 5:var n=e.type;
vendor: 13,718 bytes, line 38
38return t=t.nodeType!==1||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,Ot=e,Rt=Aa(t.firstChild),!0):!1;case 6:return t=e.pendingProps===""||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,Ot=e,Rt=null,!0):!1;case 13:return t=t.nodeType!==8?null:t,t!==null?(n=di!==null?{id:Wn,overflow:$n}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},n=Yt(18,null,null,0),n.stateNode=t,n.return=e,e.child=n,Ot=e,Rt=null,!0):!1;default:return!1}}function im(e){return(e.mode&1)!==0&&(e.flags&128)===0}function rm(e){if(je){var t=Rt;if(t){var n=t;if(!og(e,t)){if(im(e))throw Error(G(418));t=Aa(n.nextSibling);var a=Ot;t&&og(e,t)?iv(a,n):(e.flags=e.flags&-4097|2,je=!1,Ot=e)}}else{if(im(e))throw Error(G(418));e.flags=e.flags&-4097|2,je=!1,Ot=e}}}function lg(e){for(e=e.return;e!==null&&e.tag!==5&&e.tag!==3&&e.tag!==13;)e=e.return;Ot=e}function Oo(e){if(e!==Ot)return!1;if(!je)return lg(e),je=!0,!1;var t;if((t=e.tag!==3)&&!(t=e.tag!==5)&&(t=e.type,t=t!=="head"&&t!=="body"&&!em(e.type,e.memoizedProps)),t&&(t=Rt)){if(im(e))throw rv(),Error(G(418));for(;t;)iv(e,t),t=Aa(t.nextSibling)}if(lg(e),e.tag===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(G(317));e:{for(e=e.nextSibling,t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="/$"){if(t===0){Rt=Aa(e.nextSibling);break e}t--}else n!=="$"&&n!=="$!"&&n!=="$?"||t++}e=e.nextSibling}Rt=null}}else Rt=Ot?Aa(e.stateNode.nextSibling):null;return!0}function rv(){for(var e=Rt;e;)e=Aa(e.nextSibling)}function rr(){Rt=Ot=null,je=!1}function Hp(e){ln===null?ln=[e]:ln.push(e)}var FE=Jn.ReactCurrentBatchConfig;function Lr(e,t,n){if(e=n.ref,e!==null&&typeof e!="function"&&typeof e!="object"){if(n._owner){if(n=n._owner,n){if(n.tag!==1)throw Error(G(309));var a=n.stateNode}if(!a)throw Error(G(147,e));var r=a,s=""+e;return t!==null&&t.ref!==null&&typeof t.ref=="function"&&t.ref._stringRef===s?t.ref:(t=function(o){var l=r.refs;o===null?delete l[s]:l[s]=o},t._stringRef=s,t)}if(typeof e!="string")throw Error(G(284));if(!n._owner)throw Error(G(290,e))}return e}function _o(e,t){throw e=Object.prototype.toString.call(t),Error(G(31,e==="[object Object]"?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function cg(e){var t=e._init;return t(e._payload)}function sv(e){function t(x,b){if(e){var v=x.deletions;v===null?(x.deletions=[b],x.flags|=16):v.push(b)}}function n(x,b){if(!e)return null;for(;b!==null;)t(x,b),b=b.sibling;return null}function a(x,b){for(x=new Map;b!==null;)b.key!==null?x.set(b.key,b):x.set(b.index,b),b=b.sibling;return x}function r(x,b){return x=Ta(x,b),x.index=0,x.sibling=null,x}function s(x,b,v){return x.index=v,e?(v=x.alternate,v!==null?(v=v.index,v<b?(x.flags|=2,b):v):(x.flags|=2,b)):(x.flags|=1048576,b)}function o(x){return e&&x.alternate===null&&(x.flags|=2),x}function l(x,b,v,N){return b===null||b.tag!==6?(b=Vu(v,x.mode,N),b.return=x,b):(b=r(b,v),b.return=x,b)}function c(x,b,v,N){var I=v.type;return I===Ri?d(x,b,v.props.children,N,v.key):b!==null&&(b.elementType===I||typeof I=="object"&&I!==null&&I.$$typeof===da&&cg(I)===b.type)?(N=r(b,v.props),N.ref=Lr(x,b,v),N.return=x,N):(N=gl(v.type,v.key,v.props,null,x.mode,N),N.ref=Lr(x,b,v),N.return=x,N)}function u(x,b,v,N){return b===null||b.tag!==4||b.stateNode.containerInfo!==v.containerInfo||b.stateNode.implementation!==v.implementation?(b=Wu(v,x.mode,N),b.return=x,b):(b=r(b,v.children||[]),b.return=x,b)}function d(x,b,v,N,I){return b===null||b.tag!==7?(b=ri(v,x.mode,N,I),b.return=x,b):(b=r(b,v),b.return=x,b)}function m(x,b,v){if(typeof b=="string"&&b!==""||typeof b=="number")return b=Vu(""+b,x.mode,v),b.return=x,b;if(typeof b=="object"&&b!==null){switch(b.$$typeof){case Eo:return v=gl(b.type,b.key,b.props,null,x.mode,v),v.ref=Lr(x,null,b),v.return=x,v;case Di:return b=Wu(b,x.mode,v),b.return=x,b;case da:var N=b._init;return m(x,N(b._payload),v)}if(Zr(b)||Mr(b))return b=ri(b,x.mode,v,null),b.return=x,b;_o(x,b)}return null}function p(x,b,v,N){var I=b!==null?b.key:null;if(typeof v=="string"&&v!==""||typeof v=="number")return I!==null?null:l(x,b,""+v,N);if(typeof v=="object"&&v!==null){switch(v.$$typeof){case Eo:return v.key===I?c(x,b,v,N):null;case Di:return v.key===I?u(x,b,v,N):null;case da:return I=v._init,p(x,b,I(v._payload),N)}if(Zr(v)||Mr(v))return I!==null?null:d(x,b,v,N,null);_o(x,v)}return null}function f(x,b,v,N,I){if(typeof N=="string"&&N!==""||typeof N=="number")return x=x.get(v)||null,l(b,x,""+N,I);if(typeof N=="object"&&N!==null){switch(N.$$typeof){case Eo:return x=x.get(N.key===null?v:N.key)||null,c(b,x,N,I);case Di:return x=x.get(N.key===null?v:N.key)||null,u(b,x,N,I);case da:var C=N._init;return f(x,b,v,C(N._payload),I)}if(Zr(N)||Mr(N))return x=x.get(v)||null,d(b,x,N,I,null);_o(b,N)}return null}function g(x,b,v,N){for(var I=null,C=null,R=b,O=b=0,H=null;R!==null&&O<v.length;O++){R.index>O?(H=R,R=null):H=R.sibling;var P=p(x,R,v[O],N);if(P===null){R===null&&(R=H);break}e&&R&&P.alternate===null&&t(x,R),b=s(P,b,O),C===null?I=P:C.sibling=P,C=P,R=H}if(O===v.length)return n(x,R),je&&$a(x,O),I;if(R===null){for(;O<v.length;O++)R=m(x,v[O],N),R!==null&&(b=s(R,b,O),C===null?I=R:C.sibling=R,C=R);return je&&$a(x,O),I}for(R=a(x,R);O<v.length;O++)H=f(R,x,O,v[O],N),H!==null&&(e&&H.alternate!==null&&R.delete(H.key===null?O:H.key),b=s(H,b,O),C===null?I=H:C.sibling=H,C=H);return e&&R.forEach(function(Y){return t(x,Y)}),je&&$a(x,O),I}function y(x,b,v,N){var I=Mr(v);if(typeof I!="function")throw Error(G(150));if(v=I.call(v),v==null)throw Error(G(151));for(var C=I=null,R=b,O=b=0,H=null,P=v.next();R!==null&&!P.done;O++,P=v.next()){R.index>O?(H=R,R=null):H=R.sibling;var Y=p(x,R,P.value,N);if(Y===null){R===null&&(R=H);break}e&&R&&Y.alternate===null&&t(x,R),b=s(Y,b,O),C===null?I=Y:C.sibling=Y,C=Y,R=H}if(P.done)return n(x,R),je&&$a(x,O),I;if(R===null){for(;!P.done;O++,P=v.next())P=m(x,P.value,N),P!==null&&(b=s(P,b,O),C===null?I=P:C.sibling=P,C=P);return je&&$a(x,O),I}for(R=a(x,R);!P.done;O++,P=v.next())P=f(R,x,O,P.value,N),P!==null&&(e&&P.alternate!==null&&R.delete(P.key===null?O:P.key),b=s(P,b,O),C===null?I=P:C.sibling=P,C=P);return e&&R.forEach(function(K){return t(x,K)}),je&&$a(x,O),I}function w(x,b,v,N){if(typeof v=="object"&&v!==null&&v.type===Ri&&v.key===null&&(v=v.props.children),typeof v=="object"&&v!==null){switch(v.$$typeof){case Eo:e:{for(var I=v.key,C=b;C!==null;){if(C.key===I){if(I=v.type,I===Ri){if(C.tag===7){n(x,C.sibling),b=r(C,v.props.children),b.return=x,x=b;break e}}else if(C.elementType===I||typeof I=="object"&&I!==null&&I.$$typeof===da&&cg(I)===C.type){n(x,C.sibling),b=r(C,v.props),b.ref=Lr(x,C,v),b.return=x,x=b;break e}n(x,C);break}else t(x,C);C=C.sibling}v.type===Ri?(b=ri(v.props.children,x.mode,N,v.key),b.return=x,x=b):(N=gl(v.type,v.key,v.props,null,x.mode,N),N.ref=Lr(x,b,v),N.return=x,x=N)}return o(x);case Di:e:{for(C=v.key;b!==null;){if(b.key===C)if(b.tag===4&&b.stateNode.containerInfo===v.containerInfo&&b.stateNode.implementation===v.implementation){n(x,b.sibling),b=r(b,v.children||[]),b.return=x,x=b;break e}else{n(x,b);break}else t(x,b);b=b.sibling}b=Wu(v,x.mode,N),b.return=x,x=b}return o(x);case da:return C=v._init,w(x,b,C(v._payload),N)}if(Zr(v))return g(x,b,v,N);if(Mr(v))return y(x,b,v,N);_o(x,v)}return typeof v=="string"&&v!==""||typeof v=="number"?(v=""+v,b!==null&&b.tag===6?(n(x,b.sibling),b=r(b,v),b.return=x,x=b):(n(x,b),b=Vu(v,x.mode,N),b.return=x,x=b),o(x)):n(x,b)}return w}var sr=sv(!0),ov=sv(!1),Yl=_a(null),Gl=null,Hi=null,Up=null;function Vp(){Up=Hi=Gl=null}function Wp(e){var t=Yl.current;Te(Yl),e._currentValue=t}function sm(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 Ji(e,t){Gl=e,Up=Hi=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Nt=!0),e.firstContext=null)}function Xt(e){var t=e._currentValue;if(Up!==e)if(e={context:e,memoizedValue:t,next:null},Hi===null){if(Gl===null)throw Error(G(308));Hi=e,Gl.dependencies={lanes:0,firstContext:e}}else Hi=Hi.next=e;return t}var Za=null;function $p(e){Za===null?Za=[e]:Za.push(e)}function lv(e,t,n,a){var r=t.interleaved;return r===null?(n.next=n,$p(t)):(n.next=r.next,r.next=n),t.interleaved=n,Kn(e,a)}function Kn(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 ma=!1;function Yp(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function cv(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 Yn(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Ca(e,t,n){var a=e.updateQueue;if(a===null)return null;if(a=a.shared,fe&2){var r=a.pending;return r===null?t.next=t:(t.next=r.next,r.next=t),a.pending=t,Kn(e,n)}return r=a.interleaved,r===null?(t.next=t,$p(a)):(t.next=r.next,r.next=t),a.interleaved=t,Kn(e,n)}function ul(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,Mp(e,n)}}function ug(e,t){var n=e.updateQueue,a=e.alternate;if(a!==null&&(a=a.updateQueue,n===a)){var r=null,s=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};s===null?r=s=o:s=s.next=o,n=n.next}while(n!==null);s===null?r=s=t:s=s.next=t}else r=s=t;n={baseState:a.baseState,firstBaseUpdate:r,lastBaseUpdate:s,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 Ql(e,t,n,a){var r=e.updateQueue;ma=!1;var s=r.firstBaseUpdate,o=r.lastBaseUpdate,l=r.shared.pending;if(l!==null){r.shared.pending=null;var c=l,u=c.next;c.next=null,o===null?s=u:o.next=u,o=c;var d=e.alternate;d!==null&&(d=d.updateQueue,l=d.lastBaseUpdate,l!==o&&(l===null?d.firstBaseUpdate=u:l.next=u,d.lastBaseUpdate=c))}if(s!==null){var m=r.baseState;o=0,d=u=c=null,l=s;do{var p=l.lane,f=l.eventTime;if((a&p)===p){d!==null&&(d=d.next={eventTime:f,lane:0,tag:l.tag,payload:l.payload,callback:l.callback,next:null});e:{var g=e,y=l;switch(p=t,f=n,y.tag){case 1:if(g=y.payload,typeof g=="function"){m=g.call(f,m,p);break e}m=g;break e;case 3:g.flags=g.flags&-65537|128;case 0:if(g=y.payload,p=typeof g=="function"?g.call(f,m,p):g,p==null)break e;m=De({},m,p);break e;case 2:ma=!0}}l.callback!==null&&l.lane!==0&&(e.flags|=64,p=r.effects,p===null?r.effects=[l]:p.push(l))}else f={eventTime:f,lane:p,tag:l.tag,payload:l.payload,callback:l.callback,next:null},d===null?(u=d=f,c=m):d=d.next=f,o|=p;if(l=l.next,l===null){if(l=r.shared.pending,l===null)break;p=l,l=p.next,p.next=null,r.lastBaseUpdate=p,r.shared.pending=null}}while(!0);if(d===null&&(c=m),r.baseState=c,r.firstBaseUpdate=u,r.lastBaseUpdate=d,t=r.shared.interleaved,t!==null){r=t;do o|=r.lane,r=r.next;while(r!==t)}else s===null&&(r.shared.lanes=0);pi|=o,e.lanes=o,e.memoizedState=m}}function dg(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;t<e.length;t++){var a=e[t],r=a.callback;if(r!==null){if(a.callback=null,a=n,typeof r!="function")throw Error(G(191,r));r.call(a)}}}var io={},Tn=_a(io),_s=_a(io),Ls=_a(io);function Ja(e){if(e===io)throw Error(G(174));return e}function Gp(e,t){switch(Ce(Ls,t),Ce(_s,e),Ce(Tn,io),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:Bd(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=Bd(t,e)}Te(Tn),Ce(Tn,t)}function or(){Te(Tn),Te(_s),Te(Ls)}function uv(e){Ja(Ls.current);var t=Ja(Tn.current),n=Bd(t,e.type);t!==n&&(Ce(_s,e),Ce(Tn,n))}function Qp(e){_s.current===e&&(Te(Tn),Te(_s))}var Pe=_a(0);function Kl(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&128)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var zu=[];function Kp(){for(var e=0;e<zu.length;e++)zu[e]._workInProgressVersionPrimary=null;zu.length=0}var dl=Jn.ReactCurrentDispatcher,qu=Jn.ReactCurrentBatchConfig,mi=0,Me=null,We=null,Ge=null,Xl=!1,ls=!1,zs=0,HE=0;function rt(){throw Error(G(321))}function Xp(e,t){if(t===null)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!fn(e[n],t[n]))return!1;return!0}function Zp(e,t,n,a,r,s){if(mi=s,Me=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,dl.current=e===null||e.memoizedState===null?$E:YE,e=n(a,r),ls){s=0;do{if(ls=!1,zs=0,25<=s)throw Error(G(301));s+=1,Ge=We=null,t.updateQueue=null,dl.current=GE,e=n(a,r)}while(ls)}if(dl.current=Zl,t=We!==null&&We.next!==null,mi=0,Ge=We=Me=null,Xl=!1,t)throw Error(G(300));return e}function Jp(){var e=zs!==0;return zs=0,e}function vn(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return Ge===null?Me.memoizedState=Ge=e:Ge=Ge.next=e,Ge}function Zt(){if(We===null){var e=Me.alternate;e=e!==null?e.memoizedState:null}else e=We.next;var t=Ge===null?Me.memoizedState:Ge.next;if(t!==null)Ge=t,We=e;else{if(e===null)throw Error(G(310));We=e,e={memoizedState:We.memoizedState,baseState:We.baseState,baseQueue:We.baseQueue,queue:We.queue,next:null},Ge===null?Me.memoizedState=Ge=e:Ge=Ge.next=e}return Ge}function qs(e,t){return typeof t=="function"?t(e):t}function Bu(e){var t=Zt(),n=t.queue;if(n===null)throw Error(G(311));n.lastRenderedReducer=e;
vendor: 5,688 bytes, line 38
38var a=We,r=a.baseQueue,s=n.pending;if(s!==null){if(r!==null){var o=r.next;r.next=s.next,s.next=o}a.baseQueue=r=s,n.pending=null}if(r!==null){s=r.next,a=a.baseState;var l=o=null,c=null,u=s;do{var d=u.lane;if((mi&d)===d)c!==null&&(c=c.next={lane:0,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),a=u.hasEagerState?u.eagerState:e(a,u.action);else{var m={lane:d,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null};c===null?(l=c=m,o=a):c=c.next=m,Me.lanes|=d,pi|=d}u=u.next}while(u!==null&&u!==s);c===null?o=a:c.next=l,fn(a,t.memoizedState)||(Nt=!0),t.memoizedState=a,t.baseState=o,t.baseQueue=c,n.lastRenderedState=a}if(e=n.interleaved,e!==null){r=e;do s=r.lane,Me.lanes|=s,pi|=s,r=r.next;while(r!==e)}else r===null&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function Fu(e){var t=Zt(),n=t.queue;if(n===null)throw Error(G(311));n.lastRenderedReducer=e;var a=n.dispatch,r=n.pending,s=t.memoizedState;if(r!==null){n.pending=null;var o=r=r.next;do s=e(s,o.action),o=o.next;while(o!==r);fn(s,t.memoizedState)||(Nt=!0),t.memoizedState=s,t.baseQueue===null&&(t.baseState=s),n.lastRenderedState=s}return[s,a]}function dv(){}function mv(e,t){var n=Me,a=Zt(),r=t(),s=!fn(a.memoizedState,r);if(s&&(a.memoizedState=r,Nt=!0),a=a.queue,eh(fv.bind(null,n,a,e),[e]),a.getSnapshot!==t||s||Ge!==null&&Ge.memoizedState.tag&1){if(n.flags|=2048,Bs(9,hv.bind(null,n,a,r,t),void 0,null),Ke===null)throw Error(G(349));mi&30||pv(n,t,r)}return r}function pv(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},t=Me.updateQueue,t===null?(t={lastEffect:null,stores:null},Me.updateQueue=t,t.stores=[e]):(n=t.stores,n===null?t.stores=[e]:n.push(e))}function hv(e,t,n,a){t.value=n,t.getSnapshot=a,gv(t)&&xv(e)}function fv(e,t,n){return n(function(){gv(t)&&xv(e)})}function gv(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!fn(e,n)}catch{return!0}}function xv(e){var t=Kn(e,1);t!==null&&dn(t,e,1,-1)}function mg(e){var t=vn();return typeof e=="function"&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:qs,lastRenderedState:e},t.queue=e,e=e.dispatch=WE.bind(null,Me,e),[t.memoizedState,e]}function Bs(e,t,n,a){return e={tag:e,create:t,destroy:n,deps:a,next:null},t=Me.updateQueue,t===null?(t={lastEffect:null,stores:null},Me.updateQueue=t,t.lastEffect=e.next=e):(n=t.lastEffect,n===null?t.lastEffect=e.next=e:(a=n.next,n.next=e,e.next=a,t.lastEffect=e)),e}function yv(){return Zt().memoizedState}function ml(e,t,n,a){var r=vn();Me.flags|=e,r.memoizedState=Bs(1|t,n,void 0,a===void 0?null:a)}function jc(e,t,n,a){var r=Zt();a=a===void 0?null:a;var s=void 0;if(We!==null){var o=We.memoizedState;if(s=o.destroy,a!==null&&Xp(a,o.deps)){r.memoizedState=Bs(t,n,s,a);return}}Me.flags|=e,r.memoizedState=Bs(1|t,n,s,a)}function pg(e,t){return ml(8390656,8,e,t)}function eh(e,t){return jc(2048,8,e,t)}function bv(e,t){return jc(4,2,e,t)}function vv(e,t){return jc(4,4,e,t)}function wv(e,t){if(typeof t=="function")return e=e(),t(e),function(){t(null)};if(t!=null)return e=e(),t.current=e,function(){t.current=null}}function kv(e,t,n){return n=n!=null?n.concat([e]):null,jc(4,4,wv.bind(null,t,e),n)}function th(){}function Av(e,t){var n=Zt();t=t===void 0?null:t;var a=n.memoizedState;return a!==null&&t!==null&&Xp(t,a[1])?a[0]:(n.memoizedState=[e,t],e)}function Cv(e,t){var n=Zt();t=t===void 0?null:t;var a=n.memoizedState;return a!==null&&t!==null&&Xp(t,a[1])?a[0]:(e=e(),n.memoizedState=[e,t],e)}function Ev(e,t,n){return mi&21?(fn(n,t)||(n=jb(),Me.lanes|=n,pi|=n,e.baseState=!0),t):(e.baseState&&(e.baseState=!1,Nt=!0),e.memoizedState=n)}function UE(e,t){var n=xe;xe=n!==0&&4>n?n:4,e(!0);var a=qu.transition;qu.transition={};try{e(!1),t()}finally{xe=n,qu.transition=a}}function Nv(){return Zt().memoizedState}function VE(e,t,n){var a=Na(e);if(n={lane:a,action:n,hasEagerState:!1,eagerState:null,next:null},Tv(e))Sv(t,n);else if(n=lv(e,t,n,a),n!==null){var r=yt();dn(n,e,a,r),Iv(n,t,a)}}function WE(e,t,n){var a=Na(e),r={lane:a,action:n,hasEagerState:!1,eagerState:null,next:null};if(Tv(e))Sv(t,r);else{var s=e.alternate;if(e.lanes===0&&(s===null||s.lanes===0)&&(s=t.lastRenderedReducer,s!==null))try{var o=t.lastRenderedState,l=s(o,n);if(r.hasEagerState=!0,r.eagerState=l,fn(l,o)){var c=t.interleaved;c===null?(r.next=r,$p(t)):(r.next=c.next,c.next=r),t.interleaved=r;return}}catch{}finally{}n=lv(e,t,r,a),n!==null&&(r=yt(),dn(n,e,a,r),Iv(n,t,a))}}function Tv(e){var t=e.alternate;return e===Me||t!==null&&t===Me}function Sv(e,t){ls=Xl=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Iv(e,t,n){if(n&4194240){var a=t.lanes;a&=e.pendingLanes,n|=a,t.lanes=n,Mp(e,n)}}var Zl={readContext:Xt,useCallback:rt,useContext:rt,useEffect:rt,useImperativeHandle:rt,useInsertionEffect:rt,useLayoutEffect:rt,useMemo:rt,useReducer:rt,useRef:rt,useState:rt,useDebugValue:rt,useDeferredValue:rt,useTransition:rt,useMutableSource:rt,useSyncExternalStore:rt,useId:rt,unstable_isNewReconciler:!1},$E={readContext:Xt,useCallback:function(e,t){return vn().memoizedState=[e,t===void 0?null:t],e},useContext:Xt,useEffect:pg,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,ml(4194308,4,wv.bind(null,t,e),n)},useLayoutEffect:function(e,t){return ml(4194308,4,e,t)},useInsertionEffect:function(e,t){return ml(4,2,e,t)},useMemo:function(e,t){var n=vn();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var a=vn();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=VE.bind(null,Me,e),[a.memoizedState,e]}
vendor: 7,431 bytes, lines 38-40
38,useRef:function(e){var t=vn();return e={current:e},t.memoizedState=e},useState:mg,useDebugValue:th,useDeferredValue:function(e){return vn().memoizedState=e},useTransition:function(){var e=mg(!1),t=e[0];return e=UE.bind(null,e[1]),vn().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var a=Me,r=vn();if(je){if(n===void 0)throw Error(G(407));n=n()}else{if(n=t(),Ke===null)throw Error(G(349));mi&30||pv(a,t,n)}r.memoizedState=n;var s={value:n,getSnapshot:t};return r.queue=s,pg(fv.bind(null,a,s,e),[e]),a.flags|=2048,Bs(9,hv.bind(null,a,s,n,t),void 0,null),n},useId:function(){var e=vn(),t=Ke.identifierPrefix;if(je){var n=$n,a=Wn;n=(a&~(1<<32-un(a)-1)).toString(32)+n,t=":"+t+"R"+n,n=zs++,0<n&&(t+="H"+n.toString(32)),t+=":"}else n=HE++,t=":"+t+"r"+n.toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},YE={readContext:Xt,useCallback:Av,useContext:Xt,useEffect:eh,useImperativeHandle:kv,useInsertionEffect:bv,useLayoutEffect:vv,useMemo:Cv,useReducer:Bu,useRef:yv,useState:function(){return Bu(qs)},useDebugValue:th,useDeferredValue:function(e){var t=Zt();return Ev(t,We.memoizedState,e)},useTransition:function(){var e=Bu(qs)[0],t=Zt().memoizedState;return[e,t]},useMutableSource:dv,useSyncExternalStore:mv,useId:Nv,unstable_isNewReconciler:!1},GE={readContext:Xt,useCallback:Av,useContext:Xt,useEffect:eh,useImperativeHandle:kv,useInsertionEffect:bv,useLayoutEffect:vv,useMemo:Cv,useReducer:Fu,useRef:yv,useState:function(){return Fu(qs)},useDebugValue:th,useDeferredValue:function(e){var t=Zt();return We===null?t.memoizedState=e:Ev(t,We.memoizedState,e)},useTransition:function(){var e=Fu(qs)[0],t=Zt().memoizedState;return[e,t]},useMutableSource:dv,useSyncExternalStore:mv,useId:Nv,unstable_isNewReconciler:!1};function sn(e,t){if(e&&e.defaultProps){t=De({},t),e=e.defaultProps;for(var n in e)t[n]===void 0&&(t[n]=e[n]);return t}return t}function om(e,t,n,a){t=e.memoizedState,n=n(a,t),n=n==null?t:De({},t,n),e.memoizedState=n,e.lanes===0&&(e.updateQueue.baseState=n)}var Pc={isMounted:function(e){return(e=e._reactInternals)?vi(e)===e:!1},enqueueSetState:function(e,t,n){e=e._reactInternals;var a=yt(),r=Na(e),s=Yn(a,r);s.payload=t,n!=null&&(s.callback=n),t=Ca(e,s,r),t!==null&&(dn(t,e,r,a),ul(t,e,r))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var a=yt(),r=Na(e),s=Yn(a,r);s.tag=1,s.payload=t,n!=null&&(s.callback=n),t=Ca(e,s,r),t!==null&&(dn(t,e,r,a),ul(t,e,r))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=yt(),a=Na(e),r=Yn(n,a);r.tag=2,t!=null&&(r.callback=t),t=Ca(e,r,a),t!==null&&(dn(t,e,a,n),ul(t,e,a))}};function hg(e,t,n,a,r,s,o){return e=e.stateNode,typeof e.shouldComponentUpdate=="function"?e.shouldComponentUpdate(a,s,o):t.prototype&&t.prototype.isPureReactComponent?!Ms(n,a)||!Ms(r,s):!0}function jv(e,t,n){var a=!1,r=ja,s=t.contextType;return typeof s=="object"&&s!==null?s=Xt(s):(r=St(t)?ui:ct.current,a=t.contextTypes,s=(a=a!=null)?ir(e,r):ja),t=new t(n,s),e.memoizedState=t.state!==null&&t.state!==void 0?t.state:null,t.updater=Pc,e.stateNode=t,t._reactInternals=e,a&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=r,e.__reactInternalMemoizedMaskedChildContext=s),t}function fg(e,t,n,a){e=t.state,typeof t.componentWillReceiveProps=="function"&&t.componentWillReceiveProps(n,a),typeof t.UNSAFE_componentWillReceiveProps=="function"&&t.UNSAFE_componentWillReceiveProps(n,a),t.state!==e&&Pc.enqueueReplaceState(t,t.state,null)}function lm(e,t,n,a){var r=e.stateNode;r.props=n,r.state=e.memoizedState,r.refs={},Yp(e);var s=t.contextType;typeof s=="object"&&s!==null?r.context=Xt(s):(s=St(t)?ui:ct.current,r.context=ir(e,s)),r.state=e.memoizedState,s=t.getDerivedStateFromProps,typeof s=="function"&&(om(e,t,s,n),r.state=e.memoizedState),typeof t.getDerivedStateFromProps=="function"||typeof r.getSnapshotBeforeUpdate=="function"||typeof r.UNSAFE_componentWillMount!="function"&&typeof r.componentWillMount!="function"||(t=r.state,typeof r.componentWillMount=="function"&&r.componentWillMount(),typeof r.UNSAFE_componentWillMount=="function"&&r.UNSAFE_componentWillMount(),t!==r.state&&Pc.enqueueReplaceState(r,r.state,null),Ql(e,n,r,a),r.state=e.memoizedState),typeof r.componentDidMount=="function"&&(e.flags|=4194308)}function lr(e,t){try{var n="",a=t;do n+=kC(a),a=a.return;while(a);var r=n}catch(s){r=` 39Error generating stack: `+s.message+` 40`+s.stack}return{value:e,source:t,stack:r,digest:null}}function Hu(e,t,n){return{value:e,source:null,stack:n??null,digest:t??null}}function cm(e,t){try{console.error(t.value)}catch(n){setTimeout(function(){throw n})}}var QE=typeof WeakMap=="function"?WeakMap:Map;function Pv(e,t,n){n=Yn(-1,n),n.tag=3,n.payload={element:null};var a=t.value;return n.callback=function(){ec||(ec=!0,bm=a),cm(e,t)},n}function Mv(e,t,n){n=Yn(-1,n),n.tag=3;var a=e.type.getDerivedStateFromError;if(typeof a=="function"){var r=t.value;n.payload=function(){return a(r)},n.callback=function(){cm(e,t)}}var s=e.stateNode;return s!==null&&typeof s.componentDidCatch=="function"&&(n.callback=function(){cm(e,t),typeof a!="function"&&(Ea===null?Ea=new Set([this]):Ea.add(this));var o=t.stack;this.componentDidCatch(t.value,{componentStack:o!==null?o:""})}),n}function gg(e,t,n){var a=e.pingCache;if(a===null){a=e.pingCache=new QE;var r=new Set;a.set(t,r)}else r=a.get(t),r===void 0&&(r=new Set,a.set(t,r));r.has(n)||(r.add(n),e=cN.bind(null,e,t,n),t.then(e,e))}function xg(e){do{var t;if((t=e.tag===13)&&(t=e.memoizedState,t=t!==null?t.dehydrated!==null:!0),t)return e;e=e.return}while(e!==null);return null}function yg(e,t,n,a,r){return e.mode&1?(e.flags|=65536,e.lanes=r,e):(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,n.tag===1&&(n.alternate===null?n.tag=17:(t=Yn(-1,1),t.tag=2,Ca(n,t,1))),n.lanes|=1),e)}var KE=Jn.ReactCurrentOwner,Nt=!1;function ht(e,t,n,a){t.child=e===null?ov(t,null,n,a):sr(t,e.child,n,a)}function bg(e,t,n,a,r){n=n.render;var s=t.ref;return Ji(t,r),a=Zp(e,t,n,a,s,r),n=Jp(),e!==null&&!Nt?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~r,Xn(e,t,r)):(je&&n&&Bp(t),t.flags|=1,ht(e,t,a,r),t.child)}function vg(e,t,n,a,r){if(e===null){var s=n.type;return typeof s=="function"&&!ch(s)&&s.defaultProps===void 0&&n.compare===null&&n.defaultProps===void 0?(t.tag=15,t.type=s,Dv(e,t,s,a,r)):(e=gl(n.type,null,a,t,t.mode,r),e.ref=t.ref,e.return=t,t.child=e)}if(s=e.child,!(e.lanes&r)){var o=s.memoizedProps;if(n=n.compare,n=n!==null?n:Ms,n(o,a)&&e.ref===t.ref)return Xn(e,t,r)}return t.flags|=1,e=Ta(s,a),e.ref=t.ref,e.return=t,t.child=e}function Dv(e,t,n,a,r){if(e!==null){var s=e.memoizedProps;if(Ms(s,a)&&e.ref===t.ref)if(Nt=!1,t.pendingProps=a=s,(e.lanes&r)!==0)e.flags&131072&&(Nt=!0);else return t.lanes=e.lanes,Xn(e,t,r)}return um(e,t,n,a,r)}function Rv(e,t,n){var a=t.pendingProps,r=a.children,s=e!==null?e.memoizedState:null;if(a.mode==="hidden")if(!(t.mode&1))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},Ce(Vi,Dt),Dt|=n;else{if(!(n&1073741824))return e=s!==null?s.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,Ce(Vi,Dt),Dt|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},a=s!==null?s.baseLanes:n,Ce(Vi,Dt),Dt|=a}else s!==null?(a=s.baseLanes|n,t.memoizedState=null):a=n,Ce(Vi,Dt),Dt|=a;return ht(e,t,r,n),t.child}function Ov(e,t){var n=t.ref;(e===null&&n!==null||e!==null&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}
vendor: 11,349 bytes, line 40
40function um(e,t,n,a,r){var s=St(n)?ui:ct.current;return s=ir(t,s),Ji(t,r),n=Zp(e,t,n,a,s,r),a=Jp(),e!==null&&!Nt?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~r,Xn(e,t,r)):(je&&a&&Bp(t),t.flags|=1,ht(e,t,n,r),t.child)}function wg(e,t,n,a,r){if(St(n)){var s=!0;Vl(t)}else s=!1;if(Ji(t,r),t.stateNode===null)pl(e,t),jv(t,n,a),lm(t,n,a,r),a=!0;else if(e===null){var o=t.stateNode,l=t.memoizedProps;o.props=l;var c=o.context,u=n.contextType;typeof u=="object"&&u!==null?u=Xt(u):(u=St(n)?ui:ct.current,u=ir(t,u));var d=n.getDerivedStateFromProps,m=typeof d=="function"||typeof o.getSnapshotBeforeUpdate=="function";m||typeof o.UNSAFE_componentWillReceiveProps!="function"&&typeof o.componentWillReceiveProps!="function"||(l!==a||c!==u)&&fg(t,o,a,u),ma=!1;var p=t.memoizedState;o.state=p,Ql(t,a,o,r),c=t.memoizedState,l!==a||p!==c||Tt.current||ma?(typeof d=="function"&&(om(t,n,d,a),c=t.memoizedState),(l=ma||hg(t,n,l,a,p,c,u))?(m||typeof o.UNSAFE_componentWillMount!="function"&&typeof o.componentWillMount!="function"||(typeof o.componentWillMount=="function"&&o.componentWillMount(),typeof o.UNSAFE_componentWillMount=="function"&&o.UNSAFE_componentWillMount()),typeof o.componentDidMount=="function"&&(t.flags|=4194308)):(typeof o.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=a,t.memoizedState=c),o.props=a,o.state=c,o.context=u,a=l):(typeof o.componentDidMount=="function"&&(t.flags|=4194308),a=!1)}else{o=t.stateNode,cv(e,t),l=t.memoizedProps,u=t.type===t.elementType?l:sn(t.type,l),o.props=u,m=t.pendingProps,p=o.context,c=n.contextType,typeof c=="object"&&c!==null?c=Xt(c):(c=St(n)?ui:ct.current,c=ir(t,c));var f=n.getDerivedStateFromProps;(d=typeof f=="function"||typeof o.getSnapshotBeforeUpdate=="function")||typeof o.UNSAFE_componentWillReceiveProps!="function"&&typeof o.componentWillReceiveProps!="function"||(l!==m||p!==c)&&fg(t,o,a,c),ma=!1,p=t.memoizedState,o.state=p,Ql(t,a,o,r);var g=t.memoizedState;l!==m||p!==g||Tt.current||ma?(typeof f=="function"&&(om(t,n,f,a),g=t.memoizedState),(u=ma||hg(t,n,u,a,p,g,c)||!1)?(d||typeof o.UNSAFE_componentWillUpdate!="function"&&typeof o.componentWillUpdate!="function"||(typeof o.componentWillUpdate=="function"&&o.componentWillUpdate(a,g,c),typeof o.UNSAFE_componentWillUpdate=="function"&&o.UNSAFE_componentWillUpdate(a,g,c)),typeof o.componentDidUpdate=="function"&&(t.flags|=4),typeof o.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof o.componentDidUpdate!="function"||l===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),typeof o.getSnapshotBeforeUpdate!="function"||l===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),t.memoizedProps=a,t.memoizedState=g),o.props=a,o.state=g,o.context=c,a=u):(typeof o.componentDidUpdate!="function"||l===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),typeof o.getSnapshotBeforeUpdate!="function"||l===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),a=!1)}return dm(e,t,n,a,s,r)}function dm(e,t,n,a,r,s){Ov(e,t);var o=(t.flags&128)!==0;if(!a&&!o)return r&&sg(t,n,!1),Xn(e,t,s);a=t.stateNode,KE.current=t;var l=o&&typeof n.getDerivedStateFromError!="function"?null:a.render();return t.flags|=1,e!==null&&o?(t.child=sr(t,e.child,null,s),t.child=sr(t,null,l,s)):ht(e,t,l,s),t.memoizedState=a.state,r&&sg(t,n,!0),t.child}function _v(e){var t=e.stateNode;t.pendingContext?rg(e,t.pendingContext,t.pendingContext!==t.context):t.context&&rg(e,t.context,!1),Gp(e,t.containerInfo)}function kg(e,t,n,a,r){return rr(),Hp(r),t.flags|=256,ht(e,t,n,a),t.child}var mm={dehydrated:null,treeContext:null,retryLane:0};function pm(e){return{baseLanes:e,cachePool:null,transitions:null}}function Lv(e,t,n){var a=t.pendingProps,r=Pe.current,s=!1,o=(t.flags&128)!==0,l;if((l=o)||(l=e!==null&&e.memoizedState===null?!1:(r&2)!==0),l?(s=!0,t.flags&=-129):(e===null||e.memoizedState!==null)&&(r|=1),Ce(Pe,r&1),e===null)return rm(t),e=t.memoizedState,e!==null&&(e=e.dehydrated,e!==null)?(t.mode&1?e.data==="$!"?t.lanes=8:t.lanes=1073741824:t.lanes=1,null):(o=a.children,e=a.fallback,s?(a=t.mode,s=t.child,o={mode:"hidden",children:o},!(a&1)&&s!==null?(s.childLanes=0,s.pendingProps=o):s=Rc(o,a,0,null),e=ri(e,a,n,null),s.return=t,e.return=t,s.sibling=e,t.child=s,t.child.memoizedState=pm(n),t.memoizedState=mm,e):nh(t,o));if(r=e.memoizedState,r!==null&&(l=r.dehydrated,l!==null))return XE(e,t,o,a,l,r,n);if(s){s=a.fallback,o=t.mode,r=e.child,l=r.sibling;var c={mode:"hidden",children:a.children};return!(o&1)&&t.child!==r?(a=t.child,a.childLanes=0,a.pendingProps=c,t.deletions=null):(a=Ta(r,c),a.subtreeFlags=r.subtreeFlags&14680064),l!==null?s=Ta(l,s):(s=ri(s,o,n,null),s.flags|=2),s.return=t,a.return=t,a.sibling=s,t.child=a,a=s,s=t.child,o=e.child.memoizedState,o=o===null?pm(n):{baseLanes:o.baseLanes|n,cachePool:null,transitions:o.transitions},s.memoizedState=o,s.childLanes=e.childLanes&~n,t.memoizedState=mm,a}return s=e.child,e=s.sibling,a=Ta(s,{mode:"visible",children:a.children}),!(t.mode&1)&&(a.lanes=n),a.return=t,a.sibling=null,e!==null&&(n=t.deletions,n===null?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=a,t.memoizedState=null,a}function nh(e,t){return t=Rc({mode:"visible",children:t},e.mode,0,null),t.return=e,e.child=t}function Lo(e,t,n,a){return a!==null&&Hp(a),sr(t,e.child,null,n),e=nh(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function XE(e,t,n,a,r,s,o){if(n)return t.flags&256?(t.flags&=-257,a=Hu(Error(G(422))),Lo(e,t,o,a)):t.memoizedState!==null?(t.child=e.child,t.flags|=128,null):(s=a.fallback,r=t.mode,a=Rc({mode:"visible",children:a.children},r,0,null),s=ri(s,r,o,null),s.flags|=2,a.return=t,s.return=t,a.sibling=s,t.child=a,t.mode&1&&sr(t,e.child,null,o),t.child.memoizedState=pm(o),t.memoizedState=mm,s);if(!(t.mode&1))return Lo(e,t,o,null);if(r.data==="$!"){if(a=r.nextSibling&&r.nextSibling.dataset,a)var l=a.dgst;return a=l,s=Error(G(419)),a=Hu(s,a,void 0),Lo(e,t,o,a)}if(l=(o&e.childLanes)!==0,Nt||l){if(a=Ke,a!==null){switch(o&-o){case 4:r=2;break;case 16:r=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:r=32;break;case 536870912:r=268435456;break;default:r=0}r=r&(a.suspendedLanes|o)?0:r,r!==0&&r!==s.retryLane&&(s.retryLane=r,Kn(e,r),dn(a,e,r,-1))}return lh(),a=Hu(Error(G(421))),Lo(e,t,o,a)}return r.data==="$?"?(t.flags|=128,t.child=e.child,t=uN.bind(null,e),r._reactRetry=t,null):(e=s.treeContext,Rt=Aa(r.nextSibling),Ot=t,je=!0,ln=null,e!==null&&(Ut[Vt++]=Wn,Ut[Vt++]=$n,Ut[Vt++]=di,Wn=e.id,$n=e.overflow,di=t),t=nh(t,a.children),t.flags|=4096,t)}function Ag(e,t,n){e.lanes|=t;var a=e.alternate;a!==null&&(a.lanes|=t),sm(e.return,t,n)}function Uu(e,t,n,a,r){var s=e.memoizedState;s===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:a,tail:n,tailMode:r}:(s.isBackwards=t,s.rendering=null,s.renderingStartTime=0,s.last=a,s.tail=n,s.tailMode=r)}function zv(e,t,n){var a=t.pendingProps,r=a.revealOrder,s=a.tail;if(ht(e,t,a.children,n),a=Pe.current,a&2)a=a&1|2,t.flags|=128;else{if(e!==null&&e.flags&128)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&Ag(e,n,t);else if(e.tag===19)Ag(e,n,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}a&=1}if(Ce(Pe,a),!(t.mode&1))t.memoizedState=null;else switch(r){case"forwards":for(n=t.child,r=null;n!==null;)e=n.alternate,e!==null&&Kl(e)===null&&(r=n),n=n.sibling;n=r,n===null?(r=t.child,t.child=null):(r=n.sibling,n.sibling=null),Uu(t,!1,r,n,s);break;case"backwards":for(n=null,r=t.child,t.child=null;r!==null;){if(e=r.alternate,e!==null&&Kl(e)===null){t.child=r;break}e=r.sibling,r.sibling=n,n=r,r=e}Uu(t,!0,n,null,s);break;case"together":Uu(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function pl(e,t){!(t.mode&1)&&e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Xn(e,t,n){if(e!==null&&(t.dependencies=e.dependencies),pi|=t.lanes,!(n&t.childLanes))return null;if(e!==null&&t.child!==e.child)throw Error(G(153));if(t.child!==null){for(e=t.child,n=Ta(e,e.pendingProps),t.child=n,n.return=t;e.sibling!==null;)e=e.sibling,n=n.sibling=Ta(e,e.pendingProps),n.return=t;n.sibling=null}return t.child}function ZE(e,t,n){switch(t.tag){case 3:_v(t),rr();break;case 5:uv(t);break;case 1:St(t.type)&&Vl(t);break;case 4:Gp(t,t.stateNode.containerInfo);break;case 10:var a=t.type._context,r=t.memoizedProps.value;Ce(Yl,a._currentValue),a._currentValue=r;break;case 13:if(a=t.memoizedState,a!==null)return a.dehydrated!==null?(Ce(Pe,Pe.current&1),t.flags|=128,null):n&t.child.childLanes?Lv(e,t,n):(Ce(Pe,Pe.current&1),e=Xn(e,t,n),e!==null?e.sibling:null);Ce(Pe,Pe.current&1);break;case 19:if(a=(n&t.childLanes)!==0,e.flags&128){if(a)return zv(e,t,n);t.flags|=128}if(r=t.memoizedState,r!==null&&(r.rendering=null,r.tail=null,r.lastEffect=null),Ce(Pe,Pe.current),a)break;return null;case 22:case 23:return t.lanes=0,Rv(e,t,n)}return Xn(e,t,n)}var qv,hm,Bv,Fv;qv=function(e,t){for(var n=t.child;n!==null;){if(n.tag===5||n.tag===6)e.appendChild(n.stateNode);else if(n.tag!==4&&n.child!==null){n.child.return=n,n=n.child;continue}if(n===t)break;for(;n.sibling===null;){if(n.return===null||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}};hm=function(){};Bv=function(e,t,n,a){var r=e.memoizedProps;if(r!==a){e=t.stateNode,Ja(Tn.current);var s=null;switch(n){case"input":r=_d(e,r),a=_d(e,a),s=[];break;case"select":r=De({},r,{value:void 0}),a=De({},a,{value:void 0}),s=[];break;case"textarea":r=qd(e,r),a=qd(e,a),s=[];break;default:typeof r.onClick!="function"&&typeof a.onClick=="function"&&(e.onclick=Hl)}Fd(n,a);var o;n=null;for(u in r)if(!a.hasOwnProperty(u)&&r.hasOwnProperty(u)&&r[u]!=null)if(u==="style"){var l=r[u];for(o in l)l.hasOwnProperty(o)&&(n||(n={}),n[o]="")}else u!=="dangerouslySetInnerHTML"&&u!=="children"&&u!=="suppressContentEditableWarning"&&u!=="suppressHydrationWarning"&&u!=="autoFocus"&&(Es.hasOwnProperty(u)?s||(s=[]):(s=s||[]).push(u,null));for(u in a){var c=a[u];if(l=r!=null?r[u]:void 0,a.hasOwnProperty(u)&&c!==l&&(c!=null||l!=null))if(u==="style")if(l){for(o in l)!l.hasOwnProperty(o)||c&&c.hasOwnProperty(o)||(n||(n={}),n[o]="");for(o in c)c.hasOwnProperty(o)&&l[o]!==c[o]&&(n||(n={}),n[o]=c[o])}else n||(s||(s=[]),s.push(u,n)),n=c;else u==="dangerouslySetInnerHTML"?(c=c?c.__html:void 0,l=l?l.__html:void 0,c!=null&&l!==c&&(s=s||[]).push(u,c)):u==="children"?typeof c!="string"&&typeof c!="number"||(s=s||[]).push(u,""+c):u!=="suppressContentEditableWarning"&&u!=="suppressHydrationWarning"&&(Es.hasOwnProperty(u)?(c!=null&&u==="onScroll"&&Ee("scroll",e),s||l===c||(s=[])):(s=s||[]).push(u,c))}n&&(s=s||[]).push("style",n);var u=s;(t.updateQueue=u)&&(t.flags|=4)}};Fv=function(e,t,n,a){n!==a&&(t.flags|=4)};function zr(e,t){if(!je)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;t!==null;)t.alternate!==null&&(n=t),t=t.sibling;n===null?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var a=null;n!==null;)n.alternate!==null&&(a=n),n=n.sibling;a===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:a.sibling=null}}function st(e){var t=e.alternate!==null&&e.alternate.child===e.child,n=0,a=0;if(t)for(var r=e.child;r!==null;
vendor: 30,255 bytes, line 40
40)n|=r.lanes|r.childLanes,a|=r.subtreeFlags&14680064,a|=r.flags&14680064,r.return=e,r=r.sibling;else for(r=e.child;r!==null;)n|=r.lanes|r.childLanes,a|=r.subtreeFlags,a|=r.flags,r.return=e,r=r.sibling;return e.subtreeFlags|=a,e.childLanes=n,t}function JE(e,t,n){var a=t.pendingProps;switch(Fp(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return st(t),null;case 1:return St(t.type)&&Ul(),st(t),null;case 3:return a=t.stateNode,or(),Te(Tt),Te(ct),Kp(),a.pendingContext&&(a.context=a.pendingContext,a.pendingContext=null),(e===null||e.child===null)&&(Oo(t)?t.flags|=4:e===null||e.memoizedState.isDehydrated&&!(t.flags&256)||(t.flags|=1024,ln!==null&&(km(ln),ln=null))),hm(e,t),st(t),null;case 5:Qp(t);var r=Ja(Ls.current);if(n=t.type,e!==null&&t.stateNode!=null)Bv(e,t,n,a,r),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!a){if(t.stateNode===null)throw Error(G(166));return st(t),null}if(e=Ja(Tn.current),Oo(t)){a=t.stateNode,n=t.type;var s=t.memoizedProps;switch(a[En]=t,a[Os]=s,e=(t.mode&1)!==0,n){case"dialog":Ee("cancel",a),Ee("close",a);break;case"iframe":case"object":case"embed":Ee("load",a);break;case"video":case"audio":for(r=0;r<es.length;r++)Ee(es[r],a);break;case"source":Ee("error",a);break;case"img":case"image":case"link":Ee("error",a),Ee("load",a);break;case"details":Ee("toggle",a);break;case"input":Mf(a,s),Ee("invalid",a);break;case"select":a._wrapperState={wasMultiple:!!s.multiple},Ee("invalid",a);break;case"textarea":Rf(a,s),Ee("invalid",a)}Fd(n,s),r=null;for(var o in s)if(s.hasOwnProperty(o)){var l=s[o];o==="children"?typeof l=="string"?a.textContent!==l&&(s.suppressHydrationWarning!==!0&&Ro(a.textContent,l,e),r=["children",l]):typeof l=="number"&&a.textContent!==""+l&&(s.suppressHydrationWarning!==!0&&Ro(a.textContent,l,e),r=["children",""+l]):Es.hasOwnProperty(o)&&l!=null&&o==="onScroll"&&Ee("scroll",a)}switch(n){case"input":No(a),Df(a,s,!0);break;case"textarea":No(a),Of(a);break;case"select":case"option":break;default:typeof s.onClick=="function"&&(a.onclick=Hl)}a=r,t.updateQueue=a,a!==null&&(t.flags|=4)}else{o=r.nodeType===9?r:r.ownerDocument,e==="http://www.w3.org/1999/xhtml"&&(e=fb(n)),e==="http://www.w3.org/1999/xhtml"?n==="script"?(e=o.createElement("div"),e.innerHTML="<script><\/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[En]=t,e[Os]=a,qv(e,t,!1,!1),t.stateNode=e;e:{switch(o=Hd(n,a),n){case"dialog":Ee("cancel",e),Ee("close",e),r=a;break;case"iframe":case"object":case"embed":Ee("load",e),r=a;break;case"video":case"audio":for(r=0;r<es.length;r++)Ee(es[r],e);r=a;break;case"source":Ee("error",e),r=a;break;case"img":case"image":case"link":Ee("error",e),Ee("load",e),r=a;break;case"details":Ee("toggle",e),r=a;break;case"input":Mf(e,a),r=_d(e,a),Ee("invalid",e);break;case"option":r=a;break;case"select":e._wrapperState={wasMultiple:!!a.multiple},r=De({},a,{value:void 0}),Ee("invalid",e);break;case"textarea":Rf(e,a),r=qd(e,a),Ee("invalid",e);break;default:r=a}Fd(n,r),l=r;for(s in l)if(l.hasOwnProperty(s)){var c=l[s];s==="style"?yb(e,c):s==="dangerouslySetInnerHTML"?(c=c?c.__html:void 0,c!=null&&gb(e,c)):s==="children"?typeof c=="string"?(n!=="textarea"||c!=="")&&Ns(e,c):typeof c=="number"&&Ns(e,""+c):s!=="suppressContentEditableWarning"&&s!=="suppressHydrationWarning"&&s!=="autoFocus"&&(Es.hasOwnProperty(s)?c!=null&&s==="onScroll"&&Ee("scroll",e):c!=null&&Np(e,s,c,o))}switch(n){case"input":No(e),Df(e,a,!1);break;case"textarea":No(e),Of(e);break;case"option":a.value!=null&&e.setAttribute("value",""+Ia(a.value));break;case"select":e.multiple=!!a.multiple,s=a.value,s!=null?Qi(e,!!a.multiple,s,!1):a.defaultValue!=null&&Qi(e,!!a.multiple,a.defaultValue,!0);break;default:typeof r.onClick=="function"&&(e.onclick=Hl)}switch(n){case"button":case"input":case"select":case"textarea":a=!!a.autoFocus;break e;case"img":a=!0;break e;default:a=!1}}a&&(t.flags|=4)}t.ref!==null&&(t.flags|=512,t.flags|=2097152)}return st(t),null;case 6:if(e&&t.stateNode!=null)Fv(e,t,e.memoizedProps,a);else{if(typeof a!="string"&&t.stateNode===null)throw Error(G(166));if(n=Ja(Ls.current),Ja(Tn.current),Oo(t)){if(a=t.stateNode,n=t.memoizedProps,a[En]=t,(s=a.nodeValue!==n)&&(e=Ot,e!==null))switch(e.tag){case 3:Ro(a.nodeValue,n,(e.mode&1)!==0);break;case 5:e.memoizedProps.suppressHydrationWarning!==!0&&Ro(a.nodeValue,n,(e.mode&1)!==0)}s&&(t.flags|=4)}else a=(n.nodeType===9?n:n.ownerDocument).createTextNode(a),a[En]=t,t.stateNode=a}return st(t),null;case 13:if(Te(Pe),a=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(je&&Rt!==null&&t.mode&1&&!(t.flags&128))rv(),rr(),t.flags|=98560,s=!1;else if(s=Oo(t),a!==null&&a.dehydrated!==null){if(e===null){if(!s)throw Error(G(318));if(s=t.memoizedState,s=s!==null?s.dehydrated:null,!s)throw Error(G(317));s[En]=t}else rr(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;st(t),s=!1}else ln!==null&&(km(ln),ln=null),s=!0;if(!s)return t.flags&65536?t:null}return t.flags&128?(t.lanes=n,t):(a=a!==null,a!==(e!==null&&e.memoizedState!==null)&&a&&(t.child.flags|=8192,t.mode&1&&(e===null||Pe.current&1?$e===0&&($e=3):lh())),t.updateQueue!==null&&(t.flags|=4),st(t),null);case 4:return or(),hm(e,t),e===null&&Ds(t.stateNode.containerInfo),st(t),null;case 10:return Wp(t.type._context),st(t),null;case 17:return St(t.type)&&Ul(),st(t),null;case 19:if(Te(Pe),s=t.memoizedState,s===null)return st(t),null;if(a=(t.flags&128)!==0,o=s.rendering,o===null)if(a)zr(s,!1);else{if($e!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=Kl(e),o!==null){for(t.flags|=128,zr(s,!1),a=o.updateQueue,a!==null&&(t.updateQueue=a,t.flags|=4),t.subtreeFlags=0,a=n,n=t.child;n!==null;)s=n,e=a,s.flags&=14680066,o=s.alternate,o===null?(s.childLanes=0,s.lanes=e,s.child=null,s.subtreeFlags=0,s.memoizedProps=null,s.memoizedState=null,s.updateQueue=null,s.dependencies=null,s.stateNode=null):(s.childLanes=o.childLanes,s.lanes=o.lanes,s.child=o.child,s.subtreeFlags=0,s.deletions=null,s.memoizedProps=o.memoizedProps,s.memoizedState=o.memoizedState,s.updateQueue=o.updateQueue,s.type=o.type,e=o.dependencies,s.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return Ce(Pe,Pe.current&1|2),t.child}e=e.sibling}s.tail!==null&&_e()>cr&&(t.flags|=128,a=!0,zr(s,!1),t.lanes=4194304)}else{if(!a)if(e=Kl(o),e!==null){if(t.flags|=128,a=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),zr(s,!0),s.tail===null&&s.tailMode==="hidden"&&!o.alternate&&!je)return st(t),null}else 2*_e()-s.renderingStartTime>cr&&n!==1073741824&&(t.flags|=128,a=!0,zr(s,!1),t.lanes=4194304);s.isBackwards?(o.sibling=t.child,t.child=o):(n=s.last,n!==null?n.sibling=o:t.child=o,s.last=o)}return s.tail!==null?(t=s.tail,s.rendering=t,s.tail=t.sibling,s.renderingStartTime=_e(),t.sibling=null,n=Pe.current,Ce(Pe,a?n&1|2:n&1),t):(st(t),null);case 22:case 23:return oh(),a=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==a&&(t.flags|=8192),a&&t.mode&1?Dt&1073741824&&(st(t),t.subtreeFlags&6&&(t.flags|=8192)):st(t),null;case 24:return null;case 25:return null}throw Error(G(156,t.tag))}function eN(e,t){switch(Fp(t),t.tag){case 1:return St(t.type)&&Ul(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return or(),Te(Tt),Te(ct),Kp(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Qp(t),null;case 13:if(Te(Pe),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(G(340));rr()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Te(Pe),null;case 4:return or(),null;case 10:return Wp(t.type._context),null;case 22:case 23:return oh(),null;case 24:return null;default:return null}}var zo=!1,ot=!1,tN=typeof WeakSet=="function"?WeakSet:Set,J=null;function Ui(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(a){Oe(e,t,a)}else n.current=null}function fm(e,t,n){try{n()}catch(a){Oe(e,t,a)}}var Cg=!1;function nN(e,t){if(Zd=ql,e=$b(),qp(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 r=a.anchorOffset,s=a.focusNode;a=a.focusOffset;try{n.nodeType,s.nodeType}catch{n=null;break e}var o=0,l=-1,c=-1,u=0,d=0,m=e,p=null;t:for(;;){for(var f;m!==n||r!==0&&m.nodeType!==3||(l=o+r),m!==s||a!==0&&m.nodeType!==3||(c=o+a),m.nodeType===3&&(o+=m.nodeValue.length),(f=m.firstChild)!==null;)p=m,m=f;for(;;){if(m===e)break t;if(p===n&&++u===r&&(l=o),p===s&&++d===a&&(c=o),(f=m.nextSibling)!==null)break;m=p,p=m.parentNode}m=f}n=l===-1||c===-1?null:{start:l,end:c}}else n=null}n=n||{start:0,end:0}}else n=null;for(Jd={focusedElem:e,selectionRange:n},ql=!1,J=t;J!==null;)if(t=J,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,J=e;else for(;J!==null;){t=J;try{var g=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(g!==null){var y=g.memoizedProps,w=g.memoizedState,x=t.stateNode,b=x.getSnapshotBeforeUpdate(t.elementType===t.type?y:sn(t.type,y),w);x.__reactInternalSnapshotBeforeUpdate=b}break;case 3:var v=t.stateNode.containerInfo;v.nodeType===1?v.textContent="":v.nodeType===9&&v.documentElement&&v.removeChild(v.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(G(163))}}catch(N){Oe(t,t.return,N)}if(e=t.sibling,e!==null){e.return=t.return,J=e;break}J=t.return}return g=Cg,Cg=!1,g}function cs(e,t,n){var a=t.updateQueue;if(a=a!==null?a.lastEffect:null,a!==null){var r=a=a.next;do{if((r.tag&e)===e){var s=r.destroy;r.destroy=void 0,s!==void 0&&fm(t,n,s)}r=r.next}while(r!==a)}}function Mc(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 gm(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 Hv(e){var t=e.alternate;t!==null&&(e.alternate=null,Hv(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[En],delete t[Os],delete t[nm],delete t[zE],delete t[qE])),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 Uv(e){return e.tag===5||e.tag===3||e.tag===4}function Eg(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Uv(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 xm(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=Hl));else if(a!==4&&(e=e.child,e!==null))for(xm(e,t,n),e=e.sibling;e!==null;)xm(e,t,n),e=e.sibling}function ym(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(ym(e,t,n),e=e.sibling;e!==null;)ym(e,t,n),e=e.sibling}var Xe=null,on=!1;function sa(e,t,n){for(n=n.child;n!==null;)Vv(e,t,n),n=n.sibling}function Vv(e,t,n){if(Nn&&typeof Nn.onCommitFiberUnmount=="function")try{Nn.onCommitFiberUnmount(Cc,n)}catch{}switch(n.tag){case 5:ot||Ui(n,t);case 6:var a=Xe,r=on;Xe=null,sa(e,t,n),Xe=a,on=r,Xe!==null&&(on?(e=Xe,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):Xe.removeChild(n.stateNode));break;case 18:Xe!==null&&(on?(e=Xe,n=n.stateNode,e.nodeType===8?_u(e.parentNode,n):e.nodeType===1&&_u(e,n),js(e)):_u(Xe,n.stateNode));break;case 4:a=Xe,r=on,Xe=n.stateNode.containerInfo,on=!0,sa(e,t,n),Xe=a,on=r;break;case 0:case 11:case 14:case 15:if(!ot&&(a=n.updateQueue,a!==null&&(a=a.lastEffect,a!==null))){r=a=a.next;do{var s=r,o=s.destroy;s=s.tag,o!==void 0&&(s&2||s&4)&&fm(n,t,o),r=r.next}while(r!==a)}sa(e,t,n);break;case 1:if(!ot&&(Ui(n,t),a=n.stateNode,typeof a.componentWillUnmount=="function"))try{a.props=n.memoizedProps,a.state=n.memoizedState,a.componentWillUnmount()}catch(l){Oe(n,t,l)}sa(e,t,n);break;case 21:sa(e,t,n);break;case 22:n.mode&1?(ot=(a=ot)||n.memoizedState!==null,sa(e,t,n),ot=a):sa(e,t,n);break;default:sa(e,t,n)}}function Ng(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new tN),t.forEach(function(a){var r=dN.bind(null,e,a);n.has(a)||(n.add(a),a.then(r,r))})}}function nn(e,t){var n=t.deletions;if(n!==null)for(var a=0;a<n.length;a++){var r=n[a];try{var s=e,o=t,l=o;e:for(;l!==null;){switch(l.tag){case 5:Xe=l.stateNode,on=!1;break e;case 3:Xe=l.stateNode.containerInfo,on=!0;break e;case 4:Xe=l.stateNode.containerInfo,on=!0;break e}l=l.return}if(Xe===null)throw Error(G(160));Vv(s,o,r),Xe=null,on=!1;var c=r.alternate;c!==null&&(c.return=null),r.return=null}catch(u){Oe(r,t,u)}}if(t.subtreeFlags&12854)for(t=t.child;t!==null;)Wv(t,e),t=t.sibling}function Wv(e,t){var n=e.alternate,a=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(nn(t,e),bn(e),a&4){try{cs(3,e,e.return),Mc(3,e)}catch(y){Oe(e,e.return,y)}try{cs(5,e,e.return)}catch(y){Oe(e,e.return,y)}}break;case 1:nn(t,e),bn(e),a&512&&n!==null&&Ui(n,n.return);break;case 5:if(nn(t,e),bn(e),a&512&&n!==null&&Ui(n,n.return),e.flags&32){var r=e.stateNode;try{Ns(r,"")}catch(y){Oe(e,e.return,y)}}if(a&4&&(r=e.stateNode,r!=null)){var s=e.memoizedProps,o=n!==null?n.memoizedProps:s,l=e.type,c=e.updateQueue;if(e.updateQueue=null,c!==null)try{l==="input"&&s.type==="radio"&&s.name!=null&&pb(r,s),Hd(l,o);var u=Hd(l,s);for(o=0;o<c.length;o+=2){var d=c[o],m=c[o+1];d==="style"?yb(r,m):d==="dangerouslySetInnerHTML"?gb(r,m):d==="children"?Ns(r,m):Np(r,d,m,u)}switch(l){case"input":Ld(r,s);break;case"textarea":hb(r,s);break;case"select":var p=r._wrapperState.wasMultiple;r._wrapperState.wasMultiple=!!s.multiple;var f=s.value;f!=null?Qi(r,!!s.multiple,f,!1):p!==!!s.multiple&&(s.defaultValue!=null?Qi(r,!!s.multiple,s.defaultValue,!0):Qi(r,!!s.multiple,s.multiple?[]:"",!1))}r[Os]=s}catch(y){Oe(e,e.return,y)}}break;case 6:if(nn(t,e),bn(e),a&4){if(e.stateNode===null)throw Error(G(162));r=e.stateNode,s=e.memoizedProps;try{r.nodeValue=s}catch(y){Oe(e,e.return,y)}}break;case 3:if(nn(t,e),bn(e),a&4&&n!==null&&n.memoizedState.isDehydrated)try{js(t.containerInfo)}catch(y){Oe(e,e.return,y)}break;case 4:nn(t,e),bn(e);break;case 13:nn(t,e),bn(e),r=e.child,r.flags&8192&&(s=r.memoizedState!==null,r.stateNode.isHidden=s,!s||r.alternate!==null&&r.alternate.memoizedState!==null||(rh=_e())),a&4&&Ng(e);break;case 22:if(d=n!==null&&n.memoizedState!==null,e.mode&1?(ot=(u=ot)||d,nn(t,e),ot=u):nn(t,e),bn(e),a&8192){if(u=e.memoizedState!==null,(e.stateNode.isHidden=u)&&!d&&e.mode&1)for(J=e,d=e.child;d!==null;){for(m=J=d;J!==null;){switch(p=J,f=p.child,p.tag){case 0:case 11:case 14:case 15:cs(4,p,p.return);break;case 1:Ui(p,p.return);var g=p.stateNode;if(typeof g.componentWillUnmount=="function"){a=p,n=p.return;try{t=a,g.props=t.memoizedProps,g.state=t.memoizedState,g.componentWillUnmount()}catch(y){Oe(a,n,y)}}break;case 5:Ui(p,p.return);break;case 22:if(p.memoizedState!==null){Sg(m);continue}}f!==null?(f.return=p,J=f):Sg(m)}d=d.sibling}e:for(d=null,m=e;;){if(m.tag===5){if(d===null){d=m;try{r=m.stateNode,u?(s=r.style,typeof s.setProperty=="function"?s.setProperty("display","none","important"):s.display="none"):(l=m.stateNode,c=m.memoizedProps.style,o=c!=null&&c.hasOwnProperty("display")?c.display:null,l.style.display=xb("display",o))}catch(y){Oe(e,e.return,y)}}}else if(m.tag===6){if(d===null)try{m.stateNode.nodeValue=u?"":m.memoizedProps}catch(y){Oe(e,e.return,y)}}else if((m.tag!==22&&m.tag!==23||m.memoizedState===null||m===e)&&m.child!==null){m.child.return=m,m=m.child;continue}if(m===e)break e;for(;m.sibling===null;){if(m.return===null||m.return===e)break e;d===m&&(d=null),m=m.return}d===m&&(d=null),m.sibling.return=m.return,m=m.sibling}}break;case 19:nn(t,e),bn(e),a&4&&Ng(e);break;case 21:break;default:nn(t,e),bn(e)}}function bn(e){var t=e.flags;if(t&2){try{e:{for(var n=e.return;n!==null;){if(Uv(n)){var a=n;break e}n=n.return}throw Error(G(160))}switch(a.tag){case 5:var r=a.stateNode;a.flags&32&&(Ns(r,""),a.flags&=-33);var s=Eg(e);ym(e,s,r);break;case 3:case 4:var o=a.stateNode.containerInfo,l=Eg(e);xm(e,l,o);break;default:throw Error(G(161))}}catch(c){Oe(e,e.return,c)}e.flags&=-3}t&4096&&(e.flags&=-4097)}function aN(e,t,n){J=e,$v(e)}function $v(e,t,n){for(var a=(e.mode&1)!==0;J!==null;){var r=J,s=r.child;if(r.tag===22&&a){var o=r.memoizedState!==null||zo;if(!o){var l=r.alternate,c=l!==null&&l.memoizedState!==null||ot;l=zo;var u=ot;if(zo=o,(ot=c)&&!u)for(J=r;J!==null;)o=J,c=o.child,o.tag===22&&o.memoizedState!==null?Ig(r):c!==null?(c.return=o,J=c):Ig(r);for(;s!==null;)J=s,$v(s),s=s.sibling;J=r,zo=l,ot=u}Tg(e)}else r.subtreeFlags&8772&&s!==null?(s.return=r,J=s):Tg(e)}}function Tg(e){for(;J!==null;){var t=J;if(t.flags&8772){var n=t.alternate;try{if(t.flags&8772)switch(t.tag){case 0:case 11:case 15:ot||Mc(5,t);break;case 1:var a=t.stateNode;if(t.flags&4&&!ot)if(n===null)a.componentDidMount();else{var r=t.elementType===t.type?n.memoizedProps:sn(t.type,n.memoizedProps);a.componentDidUpdate(r,n.memoizedState,a.__reactInternalSnapshotBeforeUpdate)}var s=t.updateQueue;s!==null&&dg(t,s,a);break;case 3:var o=t.updateQueue;if(o!==null){if(n=null,t.child!==null)switch(t.child.tag){case 5:n=t.child.stateNode;break;case 1:n=t.child.stateNode}dg(t,o,n)}break;case 5:var l=t.stateNode;if(n===null&&t.flags&4){n=l;var c=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":c.autoFocus&&n.focus();break;case"img":c.src&&(n.src=c.src)}}break;case 6:break;case 4:break;case 12:break;case 13:if(t.memoizedState===null){var u=t.alternate;if(u!==null){var d=u.memoizedState;if(d!==null){var m=d.dehydrated;m!==null&&js(m)}}}break;case 19:case 17:case 21:case 22:case 23:case 25:break;default:throw Error(G(163))}ot||t.flags&512&&gm(t)}catch(p){Oe(t,t.return,p)}}if(t===e){J=null;break}if(n=t.sibling,n!==null){n.return=t.return,J=n;break}J=t.return}}function Sg(e){for(;J!==null;){var t=J;if(t===e){J=null;break}var n=t.sibling;if(n!==null){n.return=t.return,J=n;break}J=t.return}}function Ig(e){for(;J!==null;){var t=J;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{Mc(4,t)}catch(c){Oe(t,n,c)}break;case 1:var a=t.stateNode;if(typeof a.componentDidMount=="function"){var r=t.return;try{a.componentDidMount()}catch(c){Oe(t,r,c)}}var s=t.return;try{gm(t)}catch(c){Oe(t,s,c)}break;case 5:var o=t.return;try{gm(t)}catch(c){Oe(t,o,c)}}}catch(c){Oe(t,t.return,c)}if(t===e){J=null;break}var l=t.sibling;if(l!==null){l.return=t.return,J=l;break}J=t.return}}var iN=Math.ceil,Jl=Jn.ReactCurrentDispatcher,ah=Jn.ReactCurrentOwner,Qt=Jn.ReactCurrentBatchConfig,fe=0,Ke=null,Ue=null,et=0,Dt=0,Vi=_a(0),$e=0,Fs=null,pi=0,Dc=0,ih=0,us=null,Ct=null,rh=0,cr=1/0,Fn=null,ec=!1,bm=null,Ea=null,qo=!1,ga=null,tc=0,ds=0,vm=null,hl=-1,fl=0;function yt(){return fe&6?_e():hl!==-1?hl:hl=_e()}function Na(e){return e.mode&1?fe&2&&et!==0?et&-et:FE.transition!==null?(fl===0&&(fl=jb()),fl):(e=xe,e!==0||(e=window.event,e=e===void 0?16:Lb(e.type)),e):1}function dn(e,t,n,a){if(50<ds)throw ds=0,vm=null,Error(G(185));to(e,n,a),(!(fe&2)||e!==Ke)&&(e===Ke&&(!(fe&2)&&(Dc|=n),$e===4&&ha(e,et)),It(e,a),n===1&&fe===0&&!(t.mode&1)&&(cr=_e()+500,Ic&&La()))}function It(e,t){var n=e.callbackNode;FC(e,t);var a=zl(e,e===Ke?et:0);if(a===0)n!==null&&zf(n),e.callbackNode=null,e.callbackPriority=0;else if(t=a&-a,e.callbackPriority!==t){if(n!=null&&zf(n),t===1)e.tag===0?BE(jg.bind(null,e)):nv(jg.bind(null,e)),_E(function(){!(fe&6)&&La()}),n=null;else{switch(Pb(a)){case 1:n=Pp;break;case 4:n=Sb;break;case 16:n=Ll;break;case 536870912:n=Ib;break;default:n=Ll}n=e1(n,Yv.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function Yv(e,t){if(hl=-1,fl=0,fe&6)throw Error(G(327));var n=e.callbackNode;if(er()&&e.callbackNode!==n)return null;var a=zl(e,e===Ke?et:0);if(a===0)return null;if(a&30||a&e.expiredLanes||t)t=nc(e,a);else{t=a;var r=fe;fe|=2;var s=Qv();(Ke!==e||et!==t)&&(Fn=null,cr=_e()+500,ii(e,t));do try{oN();break}catch(l){Gv(e,l)}while(!0);Vp(),Jl.current=s,fe=r,Ue!==null?t=0:(Ke=null,et=0,t=$e)}if(t!==0){if(t===2&&(r=Yd(e),r!==0&&(a=r,t=wm(e,r))),t===1)throw n=Fs,ii(e,0),ha(e,a),It(e,_e()),n;if(t===6)ha(e,a);else{if(r=e.current.alternate,!(a&30)&&!rN(r)&&(t=nc(e,a),t===2&&(s=Yd(e),s!==0&&(a=s,t=wm(e,s))),t===1))throw n=Fs,ii(e,0),ha(e,a),It(e,_e()),n;switch(e.finishedWork=r,e.finishedLanes=a,t){case 0:case 1:throw Error(G(345));case 2:Ya(e,Ct,Fn);break;case 3:if(ha(e,a),(a&130023424)===a&&(t=rh+500-_e(),10<t)){if(zl(e,0)!==0)break;if(r=e.suspendedLanes,(r&a)!==a){yt(),e.pingedLanes|=e.suspendedLanes&r;break}e.timeoutHandle=tm(Ya.bind(null,e,Ct,Fn),t);break}Ya(e,Ct,Fn);break;case 4:if(ha(e,a),(a&4194240)===a)break;for(t=e.eventTimes,r=-1;0<a;){var o=31-un(a);s=1<<o,o=t[o],o>r&&(r=o),a&=~s}if(a=r,a=_e()-a,a=(120>a?120:480>a?480:1080>a?1080:1920>a?1920:3e3>a?3e3:4320>a?4320:1960*iN(a/1960))-a,10<a){e.timeoutHandle=tm(Ya.bind(null,e,Ct,Fn),a);break}Ya(e,Ct,Fn);break;case 5:Ya(e,Ct,Fn);break;default:throw Error(G(329))}}}return It(e,_e()),e.callbackNode===n?Yv.bind(null,e):null}function wm(e,t){var n=us;return e.current.memoizedState.isDehydrated&&(ii(e,t).flags|=256),e=nc(e,t),e!==2&&(t=Ct,Ct=n,t!==null&&km(t)),e}function km(e){Ct===null?Ct=e:Ct.push.apply(Ct,e)}function rN(e){for(var t=e;;){if(t.flags&16384){var n=t.updateQueue;if(n!==null&&(n=n.stores,n!==null))for(var a=0;a<n.length;a++){var r=n[a],s=r.getSnapshot;r=r.value;try{if(!fn(s(),r))return!1}catch{return!1}}}if(n=t.child,t.subtreeFlags&16384&&n!==null)n.return=t,t=n;else{if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}function ha(e,t){for(t&=~ih,t&=~Dc,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-un(t),a=1<<n;e[n]=-1,t&=~a}}function jg(e){if(fe&6)throw Error(G(327));er();var t=zl(e,0);if(!(t&1))return It(e,_e()),null;var n=nc(e,t);if(e.tag!==0&&n===2){var a=Yd(e);a!==0&&(t=a,n=wm(e,a))}if(n===1)throw n=Fs,ii(e,0),ha(e,t),It(e,_e()),n;if(n===6)throw Error(G(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,Ya(e,Ct,Fn),It(e,_e()),null}function sh(e,t){var n=fe;fe|=1;try{return e(t)}finally{fe=n,fe===0&&(cr=_e()+500,Ic&&La())}}function hi(e){ga!==null&&ga.tag===0&&!(fe&6)&&er();var t=fe;fe|=1;var n=Qt.transition,a=xe;try{if(Qt.transition=null,xe=1,e)return e()}finally{xe=a,Qt.transition=n,fe=t,!(fe&6)&&La()}}function oh(){Dt=Vi.current,Te(Vi)}function ii(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(n!==-1&&(e.timeoutHandle=-1,OE(n)),Ue!==null)for(n=Ue.return;n!==null;){var a=n;switch(Fp(a),a.tag){case 1:a=a.type.childContextTypes,a!=null&&Ul();break;case 3:or(),Te(Tt),Te(ct),Kp();break;case 5:Qp(a);break;case 4:or();break;case 13:Te(Pe);break;case 19:Te(Pe);break;case 10:Wp(a.type._context);break;case 22:case 23:oh()}n=n.return}if(Ke=e,Ue=e=Ta(e.current,null),et=Dt=t,$e=0,Fs=null,ih=Dc=pi=0,Ct=us=null,Za!==null){for(t=0;t<Za.length;t++)if(n=Za[t],a=n.interleaved,a!==null){n.interleaved=null;var r=a.next,s=n.pending;if(s!==null){var o=s.next;s.next=r,a.next=o}n.pending=a}Za=null}return e}function Gv(e,t){do{var n=Ue;try{if(Vp(),dl.current=Zl,Xl){for(var a=Me.memoizedState;a!==null;){var r=a.queue;r!==null&&(r.pending=null),a=a.next}Xl=!1}if(mi=0,Ge=We=Me=null,ls=!1,zs=0,ah.current=null,n===null||n.return===null){$e=1,Fs=t,Ue=null;break}e:{var s=e,o=n.return,l=n,c=t;if(t=et,l.flags|=32768,c!==null&&typeof c=="object"&&typeof c.then=="function"){var u=c,d=l,m=d.tag;if(!(d.mode&1)&&(m===0||m===11||m===15)){var p=d.alternate;p?(d.updateQueue=p.updateQueue,d.memoizedState=p.memoizedState,d.lanes=p.lanes):(d.updateQueue=null,d.memoizedState=null)}var f=xg(o);if(f!==null){f.flags&=-257,yg(f,o,l,s,t),f.mode&1&&gg(s,u,t),t=f,c=u;var g=t.updateQueue;if(g===null){var y=new Set;y.add(c),t.updateQueue=y}else g.add(c);break e}else{if(!(t&1)){gg(s,u,t),lh();break e}c=Error(G(426))}}else if(je&&l.mode&1){var w=xg(o);if(w!==null){!(w.flags&65536)&&(w.flags|=256),yg(w,o,l,s,t),Hp(lr(c,l));break e}}s=c=lr(c,l),$e!==4&&($e=2),us===null?us=[s]:us.push(s),s=o;do{switch(s.tag){case 3:s.flags|=65536,t&=-t,s.lanes|=t;var x=Pv(s,c,t);ug(s,x);break e;case 1:l=c;var b=s.type,v=s.stateNode;if(!(s.flags&128)&&(typeof b.getDerivedStateFromError=="function"||v!==null&&typeof v.componentDidCatch=="function"&&(Ea===null||!Ea.has(v)))){s.flags|=65536,t&=-t,s.lanes|=t;var N=Mv(s,l,t);ug(s,N);break e}}s=s.return}while(s!==null)}Xv(n)}catch(I){t=I,Ue===n&&n!==null&&(Ue=n=n.return);continue}break}while(!0)}function Qv(){var e=Jl.current;return Jl.current=Zl,e===null?Zl:e}function lh(){($e===0||$e===3||$e===2)&&($e=4),Ke===null||!(pi&268435455)&&!(Dc&268435455)||ha(Ke,et)}function nc(e,t){var n=fe;fe|=2;var a=Qv();(Ke!==e||et!==t)&&(Fn=null,ii(e,t));do try{sN();break}catch(r){Gv(e,r)}while(!0);if(Vp(),fe=n,Jl.current=a,Ue!==null)throw Error(G(261));return Ke=null,et=0,$e}function sN(){for(;Ue!==null;)Kv(Ue)}function oN(){for(;Ue!==null&&!MC();)Kv(Ue)}function Kv(e){var t=Jv(e.alternate,e,Dt);e.memoizedProps=e.pendingProps,t===null?Xv(e):Ue=t,ah.current=null}function Xv(e){var t=e;do{var n=t.alternate;if(e=t.return,t.flags&32768){if(n=eN(n,t),n!==null){n.flags&=32767,Ue=n;return}if(e!==null)e.flags|=32768,e.subtreeFlags=0,e.deletions=null;else{$e=6,Ue=null;return}}else if(n=JE(n,t,Dt),n!==null){Ue=n;return}if(t=t.sibling,t!==null){Ue=t;return}Ue=t=e}while(t!==null);$e===0&&($e=5)}function Ya(e,t,n){var a=xe,r=Qt.transition;try{Qt.transition=null,xe=1,lN(e,t,n,a)}finally{Qt.transition=r,xe=a}return null}function lN(e,t,n,a){do er();while(ga!==null);if(fe&6)throw Error(G(327));n=e.finishedWork;var r=e.finishedLanes;if(n===null)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(G(177));e.callbackNode=null,e.callbackPriority=0;var s=n.lanes|n.childLanes;if(HC(e,s),e===Ke&&(Ue=Ke=null,et=0),!(n.subtreeFlags&2064)&&!(n.flags&2064)||qo||(qo=!0,e1(Ll,function(){return er(),null})),s=(n.flags&15990)!==0,n.subtreeFlags&15990||s){s=Qt.transition,Qt.transition=null;var o=xe;xe=1;var l=fe;fe|=4,ah.current=null,nN(e,n),Wv(n,e),SE(Jd),ql=!!Zd,Jd=Zd=null,e.current=n,aN(n),DC(),fe=l,xe=o,Qt.transition=s}else e.current=n;if(qo&&(qo=!1,ga=e,tc=r),s=e.pendingLanes,s===0&&(Ea=null),_C(n.stateNode),It(e,_e()),t!==null)for(a=e.onRecoverableError,n=0;n<t.length;n++)r=t[n],a(r.value,{componentStack:r.stack,digest:r.digest});if(ec)throw ec=!1,e=bm,bm=null,e;return tc&1&&e.tag!==0&&er(),s=e.pendingLanes,s&1?e===vm?ds++:(ds=0,vm=e):ds=0,La(),null}function er(){if(ga!==null){var e=Pb(tc),t=Qt.transition,n=xe;try{if(Qt.transition=null,xe=16>e?16:e,ga===null)var a=!1;else{if(e=ga,ga=null,tc=0,fe&6)throw Error(G(331));var r=fe;for(fe|=4,J=e.current;J!==null;){var s=J,o=s.child;if(J.flags&16){var l=s.deletions;if(l!==null){for(var c=0;c<l.length;c++){var u=l[c];for(J=u;J!==null;){var d=J;switch(d.tag){case 0:case 11:case 15:cs(8,d,s)}var m=d.child;if(m!==null)m.return=d,J=m;else for(;J!==null;){d=J;var p=d.sibling,f=d.return;if(Hv(d),d===u){J=null;break}if(p!==null){p.return=f,J=p;break}J=f}}}var g=s.alternate;if(g!==null){var y=g.child;if(y!==null){g.child=null;do{var w=y.sibling;y.sibling=null,y=w}while(y!==null)}}J=s}}if(s.subtreeFlags&2064&&o!==null)o.return=s,J=o;else e:for(;J!==null;){if(s=J,s.flags&2048)switch(s.tag){case 0:case 11:case 15:cs(9,s,s.return)}var x=s.sibling;if(x!==null){x.return=s.return,J=x;break e}J=s.return}}var b=e.current;for(J=b;J!==null;){o=J;var v=o.child;if(o.subtreeFlags&2064&&v!==null)v.return=o,J=v;else e:for(o=b;J!==null;){if(l=J,l.flags&2048)try{switch(l.tag){case 0:case 11:case 15:Mc(9,l)}}catch(I){Oe(l,l.return,I)}if(l===o){J=null;break e}var N=l.sibling;if(N!==null){N.return=l.return,J=N;break e}J=l.return}}if(fe=r,La(),Nn&&typeof Nn.onPostCommitFiberRoot=="function")try{Nn.onPostCommitFiberRoot(Cc,e)}catch{}a=!0}return a}finally{xe=n,Qt.transition=t}}return!1}function Pg(e,t,n){t=lr(n,t),t=Pv(e,t,1),e=Ca(e,t,1),t=yt(),e!==null&&(to(e,1,t),It(e,t))}function Oe(e,t,n){if(e.tag===3)Pg(e,e,n);else for(;t!==null;){if(t.tag===3){Pg(t,e,n);break}else if(t.tag===1){var a=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof a.componentDidCatch=="function"&&(Ea===null||!Ea.has(a))){e=lr(n,e),e=Mv(t,e,1),t=Ca(t,e,1),e=yt(),t!==null&&(to(t,1,e),It(t,e));break}}t=t.return}}function cN(e,t,n){var a=e.pingCache;a!==null&&a.delete(t),t=yt(),e.pingedLanes|=e.suspendedLanes&n,Ke===e&&(et&n)===n&&($e===4||$e===3&&(et&130023424)===et&&500>_e()-rh?ii(e,0):ih|=n),It(e,t)}function Zv(e,t){t===0&&(e.mode&1?(t=Io,Io<<=1,!(Io&130023424)&&(Io=4194304)):t=1);var n=yt();e=Kn(e,t),e!==null&&(to(e,t,n),It(e,n))}function uN(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Zv(e,n)}function dN(e,t){var n=0;switch(e.tag){case 13:var a=e.stateNode,r=e.memoizedState;r!==null&&(n=r.retryLane);break;case 19:a=e.stateNode;break;default:throw Error(G(314))}a!==null&&a.delete(t),Zv(e,n)}var Jv;Jv=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||Tt.current)Nt=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return Nt=!1,ZE(e,t,n);Nt=!!(e.flags&131072)}else Nt=!1,je&&t.flags&1048576&&av(t,$l,t.index);switch(t.lanes=0,t.tag){case 2:var a=t.type;pl(e,t),e=t.pendingProps;var r=ir(t,ct.current);Ji(t,n),r=Zp(null,t,a,e,r,n);var s=Jp();return t.flags|=1,typeof r=="object"&&r!==null&&typeof r.render=="function"&&r.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,St(a)?(s=!0,Vl(t)):s=!1,t.memoizedState=r.state!==null&&r.state!==void 0?r.state:null,Yp(t),r.updater=Pc,t.stateNode=r,r._reactInternals=t,lm(t,a,e,n),t=dm(null,t,a,!0,s,n)):(t.tag=0,je&&s&&Bp(t),ht(null,t,r,n),t=t.child),t;case 16:a=t.elementType;e:{switch(pl(e,t),e=t.pendingProps,r=a._init,a=r(a._payload),t.type=a,r=t.tag=pN(a),e=sn(a,e),r){case 0:t=um(null,t,a,e,n);break e;case 1:t=wg(null,t,a,e,n);break e;case 11:t=bg(null,t,a,e,n);break e;case 14:t=vg(null,t,a,sn(a.type,e),n);break e}throw Error(G(306,a,""))}return t;
vendor: 10,581 bytes, line 40
40case 0:return a=t.type,r=t.pendingProps,r=t.elementType===a?r:sn(a,r),um(e,t,a,r,n);case 1:return a=t.type,r=t.pendingProps,r=t.elementType===a?r:sn(a,r),wg(e,t,a,r,n);case 3:e:{if(_v(t),e===null)throw Error(G(387));a=t.pendingProps,s=t.memoizedState,r=s.element,cv(e,t),Ql(t,a,null,n);var o=t.memoizedState;if(a=o.element,s.isDehydrated)if(s={element:a,isDehydrated:!1,cache:o.cache,pendingSuspenseBoundaries:o.pendingSuspenseBoundaries,transitions:o.transitions},t.updateQueue.baseState=s,t.memoizedState=s,t.flags&256){r=lr(Error(G(423)),t),t=kg(e,t,a,n,r);break e}else if(a!==r){r=lr(Error(G(424)),t),t=kg(e,t,a,n,r);break e}else for(Rt=Aa(t.stateNode.containerInfo.firstChild),Ot=t,je=!0,ln=null,n=ov(t,null,a,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(rr(),a===r){t=Xn(e,t,n);break e}ht(e,t,a,n)}t=t.child}return t;case 5:return uv(t),e===null&&rm(t),a=t.type,r=t.pendingProps,s=e!==null?e.memoizedProps:null,o=r.children,em(a,r)?o=null:s!==null&&em(a,s)&&(t.flags|=32),Ov(e,t),ht(e,t,o,n),t.child;case 6:return e===null&&rm(t),null;case 13:return Lv(e,t,n);case 4:return Gp(t,t.stateNode.containerInfo),a=t.pendingProps,e===null?t.child=sr(t,null,a,n):ht(e,t,a,n),t.child;case 11:return a=t.type,r=t.pendingProps,r=t.elementType===a?r:sn(a,r),bg(e,t,a,r,n);case 7:return ht(e,t,t.pendingProps,n),t.child;case 8:return ht(e,t,t.pendingProps.children,n),t.child;case 12:return ht(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(a=t.type._context,r=t.pendingProps,s=t.memoizedProps,o=r.value,Ce(Yl,a._currentValue),a._currentValue=o,s!==null)if(fn(s.value,o)){if(s.children===r.children&&!Tt.current){t=Xn(e,t,n);break e}}else for(s=t.child,s!==null&&(s.return=t);s!==null;){var l=s.dependencies;if(l!==null){o=s.child;for(var c=l.firstContext;c!==null;){if(c.context===a){if(s.tag===1){c=Yn(-1,n&-n),c.tag=2;var u=s.updateQueue;if(u!==null){u=u.shared;var d=u.pending;d===null?c.next=c:(c.next=d.next,d.next=c),u.pending=c}}s.lanes|=n,c=s.alternate,c!==null&&(c.lanes|=n),sm(s.return,n,t),l.lanes|=n;break}c=c.next}}else if(s.tag===10)o=s.type===t.type?null:s.child;else if(s.tag===18){if(o=s.return,o===null)throw Error(G(341));o.lanes|=n,l=o.alternate,l!==null&&(l.lanes|=n),sm(o,n,t),o=s.sibling}else o=s.child;if(o!==null)o.return=s;else for(o=s;o!==null;){if(o===t){o=null;break}if(s=o.sibling,s!==null){s.return=o.return,o=s;break}o=o.return}s=o}ht(e,t,r.children,n),t=t.child}return t;case 9:return r=t.type,a=t.pendingProps.children,Ji(t,n),r=Xt(r),a=a(r),t.flags|=1,ht(e,t,a,n),t.child;case 14:return a=t.type,r=sn(a,t.pendingProps),r=sn(a.type,r),vg(e,t,a,r,n);case 15:return Dv(e,t,t.type,t.pendingProps,n);case 17:return a=t.type,r=t.pendingProps,r=t.elementType===a?r:sn(a,r),pl(e,t),t.tag=1,St(a)?(e=!0,Vl(t)):e=!1,Ji(t,n),jv(t,a,r),lm(t,a,r,n),dm(null,t,a,!0,e,n);case 19:return zv(e,t,n);case 22:return Rv(e,t,n)}throw Error(G(156,t.tag))};function e1(e,t){return Tb(e,t)}function mN(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 Yt(e,t,n,a){return new mN(e,t,n,a)}function ch(e){return e=e.prototype,!(!e||!e.isReactComponent)}function pN(e){if(typeof e=="function")return ch(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Sp)return 11;if(e===Ip)return 14}return 2}function Ta(e,t){var n=e.alternate;return n===null?(n=Yt(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 gl(e,t,n,a,r,s){var o=2;if(a=e,typeof e=="function")ch(e)&&(o=1);else if(typeof e=="string")o=5;else e:switch(e){case Ri:return ri(n.children,r,s,t);case Tp:o=8,r|=8;break;case Md:return e=Yt(12,n,t,r|2),e.elementType=Md,e.lanes=s,e;case Dd:return e=Yt(13,n,t,r),e.elementType=Dd,e.lanes=s,e;case Rd:return e=Yt(19,n,t,r),e.elementType=Rd,e.lanes=s,e;case ub:return Rc(n,r,s,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case lb:o=10;break e;case cb:o=9;break e;case Sp:o=11;break e;case Ip:o=14;break e;case da:o=16,a=null;break e}throw Error(G(130,e==null?e:typeof e,""))}return t=Yt(o,n,t,r),t.elementType=e,t.type=a,t.lanes=s,t}function ri(e,t,n,a){return e=Yt(7,e,a,t),e.lanes=n,e}function Rc(e,t,n,a){return e=Yt(22,e,a,t),e.elementType=ub,e.lanes=n,e.stateNode={isHidden:!1},e}function Vu(e,t,n){return e=Yt(6,e,null,t),e.lanes=n,e}function Wu(e,t,n){return t=Yt(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function hN(e,t,n,a,r){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=Eu(0),this.expirationTimes=Eu(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Eu(0),this.identifierPrefix=a,this.onRecoverableError=r,this.mutableSourceEagerHydrationData=null}function uh(e,t,n,a,r,s,o,l,c){return e=new hN(e,t,n,l,c),t===1?(t=1,s===!0&&(t|=8)):t=0,s=Yt(3,null,null,t),e.current=s,s.stateNode=e,s.memoizedState={element:a,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Yp(s),e}function fN(e,t,n){var a=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:Di,key:a==null?null:""+a,children:e,containerInfo:t,implementation:n}}function t1(e){if(!e)return ja;e=e._reactInternals;e:{if(vi(e)!==e||e.tag!==1)throw Error(G(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(St(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(t!==null);throw Error(G(171))}if(e.tag===1){var n=e.type;if(St(n))return tv(e,n,t)}return t}function n1(e,t,n,a,r,s,o,l,c){return e=uh(n,a,!0,e,r,s,o,l,c),e.context=t1(null),n=e.current,a=yt(),r=Na(n),s=Yn(a,r),s.callback=t??null,Ca(n,s,r),e.current.lanes=r,to(e,r,a),It(e,a),e}function Oc(e,t,n,a){var r=t.current,s=yt(),o=Na(r);return n=t1(n),t.context===null?t.context=n:t.pendingContext=n,t=Yn(s,o),t.payload={element:e},a=a===void 0?null:a,a!==null&&(t.callback=a),e=Ca(r,t,o),e!==null&&(dn(e,r,o,s),ul(e,r,o)),o}function ac(e){if(e=e.current,!e.child)return null;switch(e.child.tag){case 5:return e.child.stateNode;default:return e.child.stateNode}}function Mg(e,t){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var n=e.retryLane;e.retryLane=n!==0&&n<t?n:t}}function dh(e,t){Mg(e,t),(e=e.alternate)&&Mg(e,t)}function gN(){return null}var a1=typeof reportError=="function"?reportError:function(e){console.error(e)};function mh(e){this._internalRoot=e}_c.prototype.render=mh.prototype.render=function(e){var t=this._internalRoot;if(t===null)throw Error(G(409));Oc(e,t,null,null)};_c.prototype.unmount=mh.prototype.unmount=function(){var e=this._internalRoot;if(e!==null){this._internalRoot=null;var t=e.containerInfo;hi(function(){Oc(null,e,null,null)}),t[Qn]=null}};function _c(e){this._internalRoot=e}_c.prototype.unstable_scheduleHydration=function(e){if(e){var t=Rb();e={blockedOn:null,target:e,priority:t};for(var n=0;n<pa.length&&t!==0&&t<pa[n].priority;n++);pa.splice(n,0,e),n===0&&_b(e)}};function ph(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function Lc(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11&&(e.nodeType!==8||e.nodeValue!==" react-mount-point-unstable "))}function Dg(){}function xN(e,t,n,a,r){if(r){if(typeof a=="function"){var s=a;a=function(){var u=ac(o);s.call(u)}}var o=n1(t,a,e,0,null,!1,!1,"",Dg);return e._reactRootContainer=o,e[Qn]=o.current,Ds(e.nodeType===8?e.parentNode:e),hi(),o}for(;r=e.lastChild;)e.removeChild(r);if(typeof a=="function"){var l=a;a=function(){var u=ac(c);l.call(u)}}var c=uh(e,0,!1,null,null,!1,!1,"",Dg);return e._reactRootContainer=c,e[Qn]=c.current,Ds(e.nodeType===8?e.parentNode:e),hi(function(){Oc(t,c,n,a)}),c}function zc(e,t,n,a,r){var s=n._reactRootContainer;if(s){var o=s;if(typeof r=="function"){var l=r;r=function(){var c=ac(o);l.call(c)}}Oc(t,o,e,r)}else o=xN(n,t,e,r,a);return ac(o)}Mb=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=Jr(t.pendingLanes);n!==0&&(Mp(t,n|1),It(t,_e()),!(fe&6)&&(cr=_e()+500,La()))}break;case 13:hi(function(){var a=Kn(e,1);if(a!==null){var r=yt();dn(a,e,1,r)}}),dh(e,1)}};Dp=function(e){if(e.tag===13){var t=Kn(e,134217728);if(t!==null){var n=yt();dn(t,e,134217728,n)}dh(e,134217728)}};Db=function(e){if(e.tag===13){var t=Na(e),n=Kn(e,t);if(n!==null){var a=yt();dn(n,e,t,a)}dh(e,t)}};Rb=function(){return xe};Ob=function(e,t){var n=xe;try{return xe=e,t()}finally{xe=n}};Vd=function(e,t,n){switch(t){case"input":if(Ld(e,n),t=n.name,n.type==="radio"&&t!=null){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var a=n[t];if(a!==e&&a.form===e.form){var r=Sc(a);if(!r)throw Error(G(90));mb(a),Ld(a,r)}}}break;case"textarea":hb(e,n);break;case"select":t=n.value,t!=null&&Qi(e,!!n.multiple,t,!1)}};wb=sh;kb=hi;var yN={usingClientEntryPoint:!1,Events:[ao,zi,Sc,bb,vb,sh]},qr={findFiberByHostInstance:Xa,bundleType:0,version:"18.3.1",rendererPackageName:"react-dom"},bN={bundleType:qr.bundleType,version:qr.version,rendererPackageName:qr.rendererPackageName,rendererConfig:qr.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:Jn.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return e=Eb(e),e===null?null:e.stateNode},findFiberByHostInstance:qr.findFiberByHostInstance||gN,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.3.1-next-f1338f8080-20240426"};
40if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var Bo=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!Bo.isDisabled&&Bo.supportsFiber)try{Cc=Bo.inject(bN),Nn=Bo}catch{}}Bt.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=yN;Bt.createPortal=function(e,t){var n=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!ph(t))throw Error(G(200));return fN(e,t,null,n)};Bt.createRoot=function(e,t){if(!ph(e))throw Error(G(299));var n=!1,a="",r=a1;return t!=null&&(t.unstable_strictMode===!0&&(n=!0),t.identifierPrefix!==void 0&&(a=t.identifierPrefix),t.onRecoverableError!==void 0&&(r=t.onRecoverableError)),t=uh(e,1,!1,null,null,n,!1,a,r),e[Qn]=t.current,Ds(e.nodeType===8?e.parentNode:e),new mh(t)};Bt.findDOMNode=function(e){if(e==null)return null;if(e.nodeType===1)return e;var t=e._reactInternals;if(t===void 0)throw typeof e.render=="function"?Error(G(188)):(e=Object.keys(e).join(","),Error(G(268,e)));return e=Eb(t),e=e===null?null:e.stateNode,e};Bt.flushSync=function(e){return hi(e)};Bt.hydrate=function(e,t,n){if(!Lc(t))throw Error(G(200));return zc(null,e,t,!0,n)};Bt.hydrateRoot=function(e,t,n){if(!ph(e))throw Error(G(405));var a=n!=null&&n.hydratedSources||null,r=!1,s="",o=a1;if(n!=null&&(n.unstable_strictMode===!0&&(r=!0),n.identifierPrefix!==void 0&&(s=n.identifierPrefix),n.onRecoverableError!==void 0&&(o=n.onRecoverableError)),t=n1(t,null,e,1,n??null,r,!1,s,o),e[Qn]=t.current,Ds(e),a)for(e=0;e<a.length;e++)n=a[e],r=n._getVersion,r=r(n._source),t.mutableSourceEagerHydrationData==null?t.mutableSourceEagerHydrationData=[n,r]:t.mutableSourceEagerHydrationData.push(n,r);return new _c(t)};Bt.render=function(e,t,n){if(!Lc(t))throw Error(G(200));return zc(null,e,t,!1,n)};Bt.unmountComponentAtNode=function(e){if(!Lc(e))throw Error(G(40));return e._reactRootContainer?(hi(function(){zc(null,null,e,!1,function(){e._reactRootContainer=null,e[Qn]=null})}),!0):!1};Bt.unstable_batchedUpdates=sh;Bt.unstable_renderSubtreeIntoContainer=function(e,t,n,a){if(!Lc(n))throw Error(G(200));if(e==null||e._reactInternals===void 0)throw Error(G(38));return zc(e,t,n,!1,a)};Bt.version="18.3.1-next-f1338f8080-20240426";function i1(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(i1)}catch(e){console.error(e)}}i1(),ib.exports=Bt;var vN=ib.exports,wN=typeof Element<"u",kN=typeof Map=="function",AN=typeof Set=="function",CN=typeof ArrayBuffer=="function"&&!!ArrayBuffer.isView;function xl(e,t){if(e===t)return!0;if(e&&t&&typeof e=="object"&&typeof t=="object"){if(e.constructor!==t.constructor)return!1;var n,a,r;if(Array.isArray(e)){if(n=e.length,n!=t.length)return!1;for(a=n;a--!==0;)if(!xl(e[a],t[a]))return!1;return!0}var s;if(kN&&e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(s=e.entries();!(a=s.next()).done;)if(!t.has(a.value[0]))return!1;for(s=e.entries();!(a=s.next()).done;)if(!xl(a.value[1],t.get(a.value[0])))return!1;return!0}if(AN&&e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(s=e.entries();!(a=s.next()).done;)if(!t.has(a.value[0]))return!1;return!0}if(CN&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(t)){if(n=e.length,n!=t.length)return!1;for(a=n;a--!==0;)if(e[a]!==t[a])return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf&&typeof e.valueOf=="function"&&typeof t.valueOf=="function")return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString&&typeof e.toString=="function"&&typeof t.toString=="function")return e.toString()===t.toString();if(r=Object.keys(e),n=r.length,n!==Object.keys(t).length)return!1;for(a=n;a--!==0;)if(!Object.prototype.hasOwnProperty.call(t,r[a]))return!1;if(wN&&e instanceof Element)return!1;for(a=n;a--!==0;)if(!((r[a]==="_owner"||r[a]==="__v"||r[a]==="__o")&&e.$$typeof)&&!xl(e[r[a]],t[r[a]]))return!1;return!0}return e!==e&&t!==t}var EN=function(t,n){try{return xl(t,n)}catch(a){if((a.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw a}};const NN=yi(EN);var TN=function(e,t,n,a,r,s,o,l){if(!e){var c;if(t===void 0)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,a,r,s,o,l],d=0;c=new Error(t.replace(/%s/g,function(){return u[d++]})),c.name="Invariant Violation"}throw c.framesToPop=1,c}},SN=TN;const Rg=yi(SN);var IN=function(t,n,a,r){var s=a?a.call(r,t,n):void 0;if(s!==void 0)return!!s;
40if(t===n)return!0;if(typeof t!="object"||!t||typeof n!="object"||!n)return!1;var o=Object.keys(t),l=Object.keys(n);if(o.length!==l.length)return!1;for(var c=Object.prototype.hasOwnProperty.bind(n),u=0;u<o.length;u++){var d=o[u];if(!c(d))return!1;var m=t[d],p=n[d];if(s=a?a.call(r,m,p,d):void 0,s===!1||s===void 0&&m!==p)return!1}return!0};const jN=yi(IN);var r1=(e=>(e.BASE="base",e.BODY="body",e.HEAD="head",e.HTML="html",e.LINK="link",e.META="meta",e.NOSCRIPT="noscript",e.SCRIPT="script",e.STYLE="style",e.TITLE="title",e.FRAGMENT="Symbol(react.fragment)",e))(r1||{}),$u={link:{rel:["amphtml","canonical","alternate"]},script:{type:["application/ld+json"]},meta:{charset:"",name:["generator","robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]}},Og=Object.values(r1),hh={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},PN=Object.entries(hh).reduce((e,[t,n])=>(e[n]=t,e),{}),cn="data-rh",tr={DEFAULT_TITLE:"defaultTitle",DEFER:"defer",ENCODE_SPECIAL_CHARACTERS:"encodeSpecialCharacters",ON_CHANGE_CLIENT_STATE:"onChangeClientState",TITLE_TEMPLATE:"titleTemplate",PRIORITIZE_SEO_TAGS:"prioritizeSeoTags"},nr=(e,t)=>{for(let n=e.length-1;n>=0;n-=1){const a=e[n];if(Object.prototype.hasOwnProperty.call(a,t))return a[t]}return null},MN=e=>{let t=nr(e,"title");const n=nr(e,tr.TITLE_TEMPLATE);if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,()=>t);const a=nr(e,tr.DEFAULT_TITLE);return t||a||void 0},DN=e=>nr(e,tr.ON_CHANGE_CLIENT_STATE)||(()=>{}),Yu=(e,t)=>
40t.filter(n=>typeof n[e]<"u").map(n=>n[e]).reduce((n,a)=>({...n,...a}),{}),RN=(e,t)=>t.filter(n=>typeof n.base<"u").map(n=>n.base).reverse().reduce((n,a)=>{if(!n.length){const r=Object.keys(a);for(let s=0;s<r.length;s+=1){const l=r[s].toLowerCase();if(e.indexOf(l)!==-1&&a[l])return n.concat(a)}}return n},[]),ON=e=>console&&typeof console.warn=="function"&&console.warn(e),Br=(e,t,n)=>{const a={};return n.filter(r=>Array.isArray(r[e])?!0:(typeof r[e]<"u"&&ON(`Helmet: ${e} should be of type "Array". Instead found type "${typeof r[e]}"`),!1)).map(r=>r[e]).reverse().reduce((r,s)=>{const o={};s.filter(c=>{let u;const d=Object.keys(c);for(let p=0;p<d.length;p+=1){const f=d[p],g=f.toLowerCase();t.indexOf(g)!==-1&&!(u==="rel"&&c[u].toLowerCase()==="canonical")&&!(g==="rel"&&c[g].toLowerCase()==="stylesheet")&&(u=g),t.indexOf(f)!==-1&&(f==="innerHTML"||f==="cssText"||f==="itemprop")&&(u=f)}if(!u||!c[u])return!1;const m=c[u].toLowerCase();return a[u]||(a[u]={}),o[u]||(o[u]={}),a[u][m]?!1:(o[u][m]=!0,!0)}).reverse().forEach(c=>r.push(c));const l=Object.keys(o);for(let c=0;c<l.length;c+=1){const u=l[c],d={...a[u],...o[u]};a[u]=d}return r},[]).reverse()},_N=(e,t)=>{if(Array.isArray(e)&&e.length){for(let n=0;n<e.length;n+=1)if(e[n][t])return!0}return!1},LN=e=>({baseTag:RN(["href"],e),bodyAttributes:Yu("bodyAttributes",e),defer:nr(e,tr.DEFER),encode:nr(e,tr.ENCODE_SPECIAL_CHARACTERS),htmlAttributes:Yu("htmlAttributes",e),linkTags:Br("link",["rel","href"],e),metaTags:Br("meta",["name","charset","http-equiv","property","itemprop"],e),noscriptTags:Br("noscript",["innerHTML"],e),onChangeClientState:DN(e),scriptTags:Br("script",["src","innerHTML"],e),styleTags:Br("style",["cssText"],e),title:MN(e),titleAttributes:Yu("titleAttributes",e),prioritizeSeoTags:_N(e,tr.PRIORITIZE_SEO_TAGS)}),s1=e=>Array.isArray(e)?e.join(""):e,zN=(e,t)=>{const n=Object.keys(e);for(let a=0;a<n.length;a+=1)if(t[n[a]]&&t[n[a]].includes(e[n[a]]))return!0;return!1},Gu=(e,t)=>Array.isArray(e)?e.reduce((n,a)=>(zN(a,t)?n.priority.push(a):n.default.push(a),n),{priority:[],default:[]}):{default:e,priority:[]},_g=(e,t)=>({...e,[t]:void 0}),qN=["noscript","script","style"],Am=(e,t=!0)=>t===!1?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'"),o1=e=>Object.keys(e).reduce((t,n)=>{const a=typeof e[n]<"u"?`${n}="${e[n]}"`:`${n}`;return t?`${t} ${a}`:a},""),BN=(e,t,n,a)=>{const r=o1(n),s=s1(t);return r?`<${e} ${cn}="true" ${r}>${Am(s,a)}</${e}>`:`<${e} ${cn}="true">${Am(s,a)}</${e}>`},FN=(e,t,n=!0)=>t.reduce((a,r)=>{const s=r,o=Object.keys(s).filter(u=>!(u==="innerHTML"||u==="cssText")).reduce((u,d)=>{const m=typeof s[d]>"u"?d:`${d}="${Am(s[d],n)}"`;return u?`${u} ${m}`:m},""),l=s.innerHTML||s.cssText||"",c=qN.indexOf(e)===-1;return`${a}<${e} ${cn}="true" ${o}${c?"/>":`>${l}</${e}>`}`},""),l1=(e,t={})=>Object.keys(e).reduce((n,a)=>{const r=hh[a];return n[r||a]=e[a],n},t),HN=(e,t,n)=>{const a={key:t,[cn]:!0},r=l1(n,a);return[Et.createElement("title",r,t)]},yl=(e,t)=>t.map((n,a)=>{const r={key:a,[cn]:!0};return Object.keys(n).forEach(s=>{const l=hh[s]||s;if(l==="innerHTML"||l==="cssText"){const c=n.innerHTML||n.cssText;r.dangerouslySetInnerHTML={__html:c}}else r[l]=n[s]}),Et.createElement(e,r)}),Ht=(e,t,n=!0)=>{switch(e){case"title":return{toComponent:()=>HN(e,t.title,t.titleAttributes),toString:()=>BN(e,t.title,t.titleAttributes,n)};case"bodyAttributes":case"htmlAttributes":return{toComponent:()=>l1(t),toString:()=>o1(t)};default:return{toComponent:()=>yl(e,t),toString:()=>FN(e,t,n)}}},UN=({metaTags:e,linkTags:t,scriptTags:n,encode:a})=>{const r=Gu(e,$u.meta),s=Gu(t,$u.link),o=Gu(n,$u.script);return{priorityMethods:{toComponent:()=>[...yl("meta",r.priority),...yl("link",s.priority),...yl("script",o.priority)],toString:()=>`${Ht("meta",r.priority,a)} ${Ht("link",s.priority,a)} ${Ht("script",o.priority,a)}`},metaTags:r.default,linkTags:s.default,scriptTags:o.default}},VN=e=>{const{baseTag:t,bodyAttributes:n,encode:a=!0,htmlAttributes:r,noscriptTags:s,styleTags:o,title:l="",titleAttributes:c,prioritizeSeoTags:u}=e;let{linkTags:d,metaTags:m,scriptTags:p}=e,f={toComponent:()=>{},toString:()=>""};return u&&({priorityMethods:f,linkTags:d,metaTags:m,scriptTags:p}=UN(e)),{priority:f,base:Ht("base",t,a),bodyAttributes:Ht("bodyAttributes",n,a),htmlAttributes:Ht("htmlAttributes",r,a),link:Ht("link",d,a),meta:Ht("meta",m,a),noscript:Ht("noscript",s,a),script:Ht("script",p,a),style:Ht("style",o,a),title:Ht("title",{title:l,titleAttributes:c},a)}},Cm=VN,Fo=[],c1=!!(typeof window<"u"&&window.document&&window.document.createElement),Em=class{constructor(e,t){zn(this,"instances",[]);zn(this,"canUseDOM",c1);zn(this,"context");zn(this,"value",{setHelmet:e=>{this.context.helmet=e},helmetInstances:{get:()=>this.canUseDOM?Fo:this.instances,add:e=>{(this.canUseDOM?Fo:this.instances).push(e)},remove:e=>{const t=(this.canUseDOM?Fo:this.instances).indexOf(e);(this.canUseDOM?Fo:this.instances).splice(t,1)}}});this.context=e,this.canUseDOM=t||!1,t||(e.helmet=Cm({baseTag:[],bodyAttributes:{},htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))}},WN={},u1=Et.createContext(WN),ai,d1=(ai=class extends T.Component{constructor(n){super(n);zn(this,"helmetData");this.helmetData=new Em(this.props.context||{},ai.canUseDOM)}render(){return Et.createElement(u1.Provider,{value:this.helmetData.value},this.props.children)}},zn(ai,"canUseDOM",c1),ai),Ti=(e,t)=>{const n=document.head||document.querySelector("head"),a=n.querySelectorAll(`${e}[${cn}]`),r=[].slice.call(a),s=[];let o;return t&&t.length&&t.forEach(l=>{const c=document.createElement(e);for(const u in l)if(Object.prototype.hasOwnProperty.call(l,u))if(u==="innerHTML")c.innerHTML=l.innerHTML;else if(u==="cssText")c.styleSheet?c.styleSheet.cssText=l.cssText:c.appendChild(document.createTextNode(l.cssText));else{const d=u,m=typeof l[d]>"u"?"":l[d];c.setAttribute(u,m)}c.setAttribute(cn,"true"),r.some((u,d)=>(o=d,c.isEqualNode(u)))?r.splice(o,1):s.push(c)}),r.forEach(l=>{var c;return(c=l.parentNode)==null?void 0:c.removeChild(l)}
40),s.forEach(l=>n.appendChild(l)),{oldTags:r,newTags:s}},Nm=(e,t)=>{const n=document.getElementsByTagName(e)[0];if(!n)return;const a=n.getAttribute(cn),r=a?a.split(","):[],s=[...r],o=Object.keys(t);for(const l of o){const c=t[l]||"";n.getAttribute(l)!==c&&n.setAttribute(l,c),r.indexOf(l)===-1&&r.push(l);const u=s.indexOf(l);u!==-1&&s.splice(u,1)}for(let l=s.length-1;l>=0;l-=1)n.removeAttribute(s[l]);r.length===s.length?n.removeAttribute(cn):n.getAttribute(cn)!==o.join(",")&&n.setAttribute(cn,o.join(","))},$N=(e,t)=>{typeof e<"u"&&document.title!==e&&(document.title=s1(e)),Nm("title",t)},Lg=(e,t)=>{const{baseTag:n,bodyAttributes:a,htmlAttributes:r,linkTags:s,metaTags:o,noscriptTags:l,onChangeClientState:c,scriptTags:u,styleTags:d,title:m,titleAttributes:p}=e;Nm("body",a),Nm("html",r),$N(m,p);const f={baseTag:Ti("base",n),linkTags:Ti("link",s),metaTags:Ti("meta",o),noscriptTags:Ti("noscript",l),scriptTags:Ti("script",u),styleTags:Ti("style",d)},g={},y={};Object.keys(f).forEach(w=>{const{newTags:x,oldTags:b}=f[w];x.length&&(g[w]=x),b.length&&(y[w]=f[w].oldTags)}),t&&t(),c(e,g,y)},Fr=null,YN=e=>{Fr&&cancelAnimationFrame(Fr),e.defer?Fr=requestAnimationFrame(()=>{Lg(e,()=>{Fr=null})}):(Lg(e),Fr=null)},GN=YN,zg=class extends T.Component{constructor(){super(...arguments);zn(this,"rendered",!1)}shouldComponentUpdate(t){return!jN(t,this.props)}componentDidUpdate(){this.emitChange()}componentWillUnmount(){const{helmetInstances:t}=this.props.context;t.remove(this),this.emitChange()}emitChange(){const{helmetInstances:t,setHelmet:n}=this.props.context;let a=null;const r=LN(t.get().map(s=>{const o={...s.props};return delete o.context,o}));d1.canUseDOM?GN(r):Cm&&(a=Cm(r)),n(a)}init(){if(this.rendered)return;this.rendered=!0;const{helmetInstances:t}=this.props.context;t.add(this),this.emitChange()}render(){return this.init(),null}},jd,QN=(jd=class extends T.Component{shouldComponentUpdate(e){return!NN(_g(this.props,"helmetData"),_g(e,"helmetData"))}mapNestedChildrenToProps(e,t){if(!t)return null;switch(e.type){case"script":case"noscript":return{innerHTML:t};case"style":return{cssText:t};default:throw new Error(`<${e.type} /> elements are self-closing and can not contain children. Refer to our API for more information.`)}}flattenArrayTypeChildren(e,t,n,a){return{...t,[e.type]:[...t[e.type]||[],{...n,...this.mapNestedChildrenToProps(e,a)}]}}mapObjectTypeChildren(e,t,n,a){switch(e.type){case"title":return{...t,[e.type]:a,titleAttributes:{...n}};case"body":return{...t,bodyAttributes:{...n}};case"html":return{...t,htmlAttributes:{...n}};default:return{...t,[e.type]:{...n}}}}mapArrayTypeChildrenToProps(e,t){let n={...t};return Object.keys(e).forEach(a=>{n={...n,[a]:e[a]}}),n}warnOnInvalidChildren(e,t){return Rg(Og.some(n=>e.type===n),typeof e.type=="function"?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":`Only elements types ${Og.join(", ")} are allowed. Helmet does not support rendering <${e.type}> elements. Refer to our API for more information.`),Rg(!t||typeof t=="string"||Array.isArray(t)&&!t.some(n=>typeof n!="string"),`Helmet expects a string as a child of <${e.type}>. Did you forget to wrap your children in braces? ( <${e.type}>{\`\`}</${e.type}> ) Refer to our API for more information.`),!0}mapChildrenToProps(e,t){let n={};return Et.Children.forEach(e,a=>{if(!a||!a.props)return;const{children:r,...s}=a.props,o=Object.keys(s).reduce((c,u)=>(c[PN[u]||u]=s[u],c),{});let{type:l}=a;
40switch(typeof l=="symbol"?l=l.toString():this.warnOnInvalidChildren(a,r),l){case"Symbol(react.fragment)":t=this.mapChildrenToProps(r,t);break;case"link":case"meta":case"noscript":case"script":case"style":n=this.flattenArrayTypeChildren(a,n,o,r);break;default:t=this.mapObjectTypeChildren(a,t,o,r);break}}),this.mapArrayTypeChildrenToProps(n,t)}render(){const{children:e,...t}=this.props;let n={...t},{helmetData:a}=t;if(e&&(n=this.mapChildrenToProps(e,n)),a&&!(a instanceof Em)){const r=a;a=new Em(r.context,!0),delete n.helmetData}return a?Et.createElement(zg,{...n,context:a.value}):Et.createElement(u1.Consumer,null,r=>Et.createElement(zg,{...n,context:r}))}},zn(jd,"defaultProps",{defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1}),jd);/** 41 * @license lucide-react v0.441.0 - ISC 42 * 43 * This source code is licensed under the ISC license. 44 * See the LICENSE file in the root directory of this source tree. 45 */const KN=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),m1=(...e)=>e.filter((t,n,a)=>!!t&&a.indexOf(t)===n).join(" ");/** 46 * @license lucide-react v0.441.0 - ISC 47 * 48 * This source code is licensed under the ISC license. 49 * See the LICENSE file in the root directory of this source tree. 50 */var XN={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** 51 * @license lucide-react v0.441.0 - ISC 52 * 53 * This source code is licensed under the ISC license. 54 * See the LICENSE file in the root directory of this source tree. 55 */const ZN=T.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:n=2,absoluteStrokeWidth:a,className:r="",children:s,iconNode:o,...l},c)=>T.createElement("svg",{ref:c,...XN,width:t,height:t,stroke:e,strokeWidth:a?Number(n)*24/Number(t):n,className:m1("lucide",r),...l},[...o.map(([u,d])=>T.createElement(u,d)),...Array.isArray(s)?s:[s]]));/** 56 * @license lucide-react v0.441.0 - ISC 57 * 58 * This source code is licensed under the ISC license. 59 * See the LICENSE file in the root directory of this source tree. 60 */const X=(e,t)=>{const n=T.forwardRef(({className:a,...r},s)=>T.createElement(ZN,{ref:s,iconNode:t,className:m1(`lucide-${KN(e)}`,a),...r}));return n.displayName=`${e}`,n};/** 61 * @license lucide-react v0.441.0 - ISC 62 * 63 * This source code is licensed under the ISC license. 64 * See the LICENSE file in the root directory of this source tree. 65 */const br=X("Activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);/** 66 * @license lucide-react v0.441.0 - ISC 67 * 68 * This source code is licensed under the ISC license. 69 * See the LICENSE file in the root directory of this source tree. 70 */const ms=X("ArrowLeft",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);/** 71 * @license lucide-react v0.441.0 - ISC 72 * 73 * This source code is licensed under the ISC license. 74 * See the LICENSE file in the root directory of this source tree. 75 */const ut=X("ArrowRight",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]);/** 76 * @license lucide-react v0.441.0 - ISC 77 * 78 * This source code is licensed under the ISC license. 79 * See the LICENSE file in the root directory of this source tree. 80 */const qc=X("Award",[["path",{d:"m15.477 12.89 1.515 8.526a.5.5 0 0 1-.81.47l-3.58-2.687a1 1 0 0 0-1.197 0l-3.586 2.686a.5.5 0 0 1-.81-.469l1.514-8.526",key:"1yiouv"}],["circle",{cx:"12",cy:"8",r:"6",key:"1vp47v"}]]);/** 81 * @license lucide-react v0.441.0 - ISC 82 * 83 * This source code is licensed under the ISC license. 84 * See the LICENSE file in the root directory of this source tree. 85 */const Bc=X("BadgeCheck",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** 86 * @license lucide-react v0.441.0 - ISC 87 * 88 * This source code is licensed under the ISC license. 89 * See the LICENSE file in the root directory of this source tree. 90 */const JN=X("Beaker",[["path",{d:"M4.5 3h15",key:"c7n0jr"}],["path",{d:"M6 3v16a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V3",key:"m1uhx7"}],["path",{d:"M6 14h12",key:"4cwo0f"}]]);/** 91 * @license lucide-react v0.441.0 - ISC 92 * 93 * This source code is licensed under the ISC license. 94 * See the LICENSE file in the root directory of this source tree. 95 */const fi=X("Bell",[["path",{d:"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9",key:"1qo2s2"}],["path",{d:"M10.3 21a1.94 1.94 0 0 0 3.4 0",key:"qgo35s"}]]);/** 96 * @license lucide-react v0.441.0 - ISC 97 * 98 * This source code is licensed under the ISC license. 99 * See the LICENSE file in the root directory of this source tree. 100 */const Un=X("Bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);/** 101 * @license lucide-react v0.441.0 - ISC 102 * 103 * This source code is licensed under the ISC license. 104 * See the LICENSE file in the root directory of this source tree. 105 */const ea=X("Brain",[["path",{d:"M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z",key:"l5xja"}],["path",{d:"M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z",key:"ep3f8r"}],["path",{d:"M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4",key:"1p4c4q"}],["path",{d:"M17.599 6.5a3 3 0 0 0 .399-1.375",key:"tmeiqw"}],["path",{d:"M6.003 5.125A3 3 0 0 0 6.401 6.5",key:"105sqy"}],["path",{d:"M3.477 10.896a4 4 0 0 1 .585-.396",key:"ql3yin"}],["path",{d:"M19.938 10.5a4 4 0 0 1 .585.396",key:"1qfode"}],["path",{d:"M6 18a4 4 0 0 1-1.967-.516",key:"2e4loj"}],["path",{d:"M19.967 17.484A4 4 0 0 1 18 18",key:"159ez6"}]]);/** 106 * @license lucide-react v0.441.0 - ISC 107 * 108 * This source code is licensed under the ISC license. 109 * See the LICENSE file in the root directory of this source tree. 110 */const ro=X("Building2",[["path",{d:"M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z",key:"1b4qmf"}],["path",{d:"M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2",key:"i71pzd"}],["path",{d:"M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2",key:"10jefs"}],["path",{d:"M10 6h4",key:"1itunk"}],["path",{d:"M10 10h4",key:"tcdvrf"}
110],["path",{d:"M10 14h4",key:"kelpxr"}],["path",{d:"M10 18h4",key:"1ulq68"}]]);/** 111 * @license lucide-react v0.441.0 - ISC 112 * 113 * This source code is licensed under the ISC license. 114 * See the LICENSE file in the root directory of this source tree. 115 */const eT=X("Building",[["rect",{width:"16",height:"20",x:"4",y:"2",rx:"2",ry:"2",key:"76otgf"}],["path",{d:"M9 22v-4h6v4",key:"r93iot"}],["path",{d:"M8 6h.01",key:"1dz90k"}],["path",{d:"M16 6h.01",key:"1x0f13"}],["path",{d:"M12 6h.01",key:"1vi96p"}],["path",{d:"M12 10h.01",key:"1nrarc"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M16 10h.01",key:"1m94wz"}],["path",{d:"M16 14h.01",key:"1gbofw"}],["path",{d:"M8 10h.01",key:"19clt8"}],["path",{d:"M8 14h.01",key:"6423bh"}]]);/** 116 * @license lucide-react v0.441.0 - ISC 117 * 118 * This source code is licensed under the ISC license. 119 * See the LICENSE file in the root directory of this source tree. 120 */const qt=X("Calendar",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]]);/** 121 * @license lucide-react v0.441.0 - ISC 122 * 123 * This source code is licensed under the ISC license. 124 * See the LICENSE file in the root directory of this source tree. 125 */const Fc=X("Camera",[["path",{d:"M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z",key:"1tc9qg"}],["circle",{cx:"12",cy:"13",r:"3",key:"1vg3eu"}]]);/** 126 * @license lucide-react v0.441.0 - ISC 127 * 128 * This source code is licensed under the ISC license. 129 * See the LICENSE file in the root directory of this source tree. 130 */const In=X("ChartColumn",[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]]);/** 131 * @license lucide-react v0.441.0 - ISC 132 * 133 * This source code is licensed under the ISC license. 134 * See the LICENSE file in the root directory of this source tree. 135 */const ze=X("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/** 136 * @license lucide-react v0.441.0 - ISC 137 * 138 * This source code is licensed under the ISC license. 139 * See the LICENSE file in the root directory of this source tree. 140 */const Hc=X("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);/** 141 * @license lucide-react v0.441.0 - ISC 142 * 143 * This source code is licensed under the ISC license. 144 * See the LICENSE file in the root directory of this source tree. 145 */const fh=X("ChevronLeft",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]);/** 146 * @license lucide-react v0.441.0 - ISC 147 * 148 * This source code is licensed under the ISC license. 149 * See the LICENSE file in the root directory of this source tree. 150 */const gh=X("ChevronRight",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);/** 151 * @license lucide-react v0.441.0 - ISC 152 * 153 * This source code is licensed under the ISC license. 154 * See the LICENSE file in the root directory of this source tree. 155 */const ge=X("CircleAlert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);/** 156 * @license lucide-react v0.441.0 - ISC 157 * 158 * This source code is licensed under the ISC license. 159 * See the LICENSE file in the root directory of this source tree. 160 */const oe=X("CircleCheckBig",[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]]);/** 161 * @license lucide-react v0.441.0 - ISC 162 * 163 * This source code is licensed under the ISC license. 164 * See the LICENSE file in the root directory of this source tree. 165 */const Uc=X("ClipboardCheck",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"m9 14 2 2 4-4",key:"df797q"}]]);/** 166 * @license lucide-react v0.441.0 - ISC 167 * 168 * This source code is licensed under the ISC license. 169 * See the LICENSE file in the root directory of this source tree. 170 */const za=X("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/** 171 * @license lucide-react v0.441.0 - ISC 172 * 173 * This source code is licensed under the ISC license. 174 * See the LICENSE file in the root directory of this source tree. 175 */const ic=X("CloudUpload",[["path",{d:"M12 13v8",key:"1l5pq0"}],["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242",key:"1pljnt"}],["path",{d:"m8 17 4-4 4 4",key:"1quai1"}]]);/** 176 * @license lucide-react v0.441.0 - ISC 177 * 178 * This source code is licensed under the ISC license. 179 * See the LICENSE file in the root directory of this source tree. 180 */const qg=X("Code",[["polyline",{points:"16 18 22 12 16 6",key:"z7tu5w"}],["polyline",{points:"8 6 2 12 8 18",key:"1eg1df"}]]);/** 181 * @license lucide-react v0.441.0 - ISC 182 * 183 * This source code is licensed under the ISC license. 184 * See the LICENSE file in the root directory of this source tree. 185 */const Vc=X("Columns2",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M12 3v18",key:"108xh3"}]]);/** 186 * @license lucide-react v0.441.0 - ISC 187 * 188 * This source code is licensed under the ISC license. 189 * See the LICENSE file in the root directory of this source tree.
190 */const tT=X("Copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);/** 191 * @license lucide-react v0.441.0 - ISC 192 * 193 * This source code is licensed under the ISC license. 194 * See the LICENSE file in the root directory of this source tree. 195 */const nT=X("Cpu",[["rect",{width:"16",height:"16",x:"4",y:"4",rx:"2",key:"14l7u7"}],["rect",{width:"6",height:"6",x:"9",y:"9",rx:"1",key:"5aljv4"}],["path",{d:"M15 2v2",key:"13l42r"}],["path",{d:"M15 20v2",key:"15mkzm"}],["path",{d:"M2 15h2",key:"1gxd5l"}],["path",{d:"M2 9h2",key:"1bbxkp"}],["path",{d:"M20 15h2",key:"19e6y8"}],["path",{d:"M20 9h2",key:"19tzq7"}],["path",{d:"M9 2v2",key:"165o2o"}],["path",{d:"M9 20v2",key:"i2bqo8"}]]);/** 196 * @license lucide-react v0.441.0 - ISC 197 * 198 * This source code is licensed under the ISC license. 199 * See the LICENSE file in the root directory of this source tree. 200 */const ta=X("Database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);/** 201 * @license lucide-react v0.441.0 - ISC 202 * 203 * This source code is licensed under the ISC license. 204 * See the LICENSE file in the root directory of this source tree. 205 */const xh=X("DollarSign",[["line",{x1:"12",x2:"12",y1:"2",y2:"22",key:"7eqyqh"}],["path",{d:"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6",key:"1b0p4s"}]]);/** 206 * @license lucide-react v0.441.0 - ISC 207 * 208 * This source code is licensed under the ISC license. 209 * See the LICENSE file in the root directory of this source tree. 210 */const aT=X("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]]);/** 211 * @license lucide-react v0.441.0 - ISC 212 * 213 * This source code is licensed under the ISC license. 214 * See the LICENSE file in the root directory of this source tree. 215 */const Wc=X("Eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** 216 * @license lucide-react v0.441.0 - ISC 217 * 218 * This source code is licensed under the ISC license. 219 * See the LICENSE file in the root directory of this source tree. 220 */const iT=X("FileCheck",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"m9 15 2 2 4-4",key:"1grp1n"}]]);/** 221 * @license lucide-react v0.441.0 - ISC 222 * 223 * This source code is licensed under the ISC license. 224 * See the LICENSE file in the root directory of this source tree. 225 */const jn=X("FileText",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);/** 226 * @license lucide-react v0.441.0 - ISC 227 * 228 * This source code is licensed under the ISC license. 229 * See the LICENSE file in the root directory of this source tree. 230 */const p1=X("FileX",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"m14.5 12.5-5 5",key:"b62r18"}],["path",{d:"m9.5 12.5 5 5",key:"1rk7el"}]]);/** 231 * @license lucide-react v0.441.0 - ISC 232 * 233 * This source code is licensed under the ISC license. 234 * See the LICENSE file in the root directory of this source tree. 235 */const Pa=X("Flame",[["path",{d:"M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 2.5z",key:"96xj49"}]]);/** 236 * @license lucide-react v0.441.0 - ISC 237 * 238 * This source code is licensed under the ISC license. 239 * See the LICENSE file in the root directory of this source tree. 240 */const $c=X("GitCompare",[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M13 6h3a2 2 0 0 1 2 2v7",key:"1yeb86"}],["path",{d:"M11 18H8a2 2 0 0 1-2-2V9",key:"19pyzm"}]]);/** 241 * @license lucide-react v0.441.0 - ISC 242 * 243 * This source code is licensed under the ISC license. 244 * See the LICENSE file in the root directory of this source tree. 245 */const ur=X("Github",[["path",{d:"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4",key:"tonef"}],["path",{d:"M9 18c-4.51 2-5-2-7-2",key:"9comsn"}]]);/** 246 * @license lucide-react v0.441.0 - ISC 247 * 248 * This source code is licensed under the ISC license. 249 * See the LICENSE file in the root directory of this source tree. 250 */const Hs=X("Globe",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]]);/** 251 * @license lucide-react v0.441.0 - ISC 252 * 253 * This source code is licensed under the ISC license. 254 * See the LICENSE file in the root directory of this source tree. 255 */const h1=X("Key",[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]]);/** 256 * @license lucide-react v0.441.0 - ISC 257 * 258 * This source code is licensed under the ISC license. 259 * See the LICENSE file in the root directory of this source tree.
260 */const mn=X("LayoutDashboard",[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]]);/** 261 * @license lucide-react v0.441.0 - ISC 262 * 263 * This source code is licensed under the ISC license. 264 * See the LICENSE file in the root directory of this source tree. 265 */const Yc=X("Link",[["path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71",key:"1cjeqo"}],["path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71",key:"19qd67"}]]);/** 266 * @license lucide-react v0.441.0 - ISC 267 * 268 * This source code is licensed under the ISC license. 269 * See the LICENSE file in the root directory of this source tree. 270 */const rT=X("Linkedin",[["path",{d:"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z",key:"c2jq9f"}],["rect",{width:"4",height:"12",x:"2",y:"9",key:"mk3on5"}],["circle",{cx:"4",cy:"4",r:"2",key:"bt5ra8"}]]);/** 271 * @license lucide-react v0.441.0 - ISC 272 * 273 * This source code is licensed under the ISC license. 274 * See the LICENSE file in the root directory of this source tree. 275 */const sT=X("Loader",[["path",{d:"M12 2v4",key:"3427ic"}],["path",{d:"m16.2 7.8 2.9-2.9",key:"r700ao"}],["path",{d:"M18 12h4",key:"wj9ykh"}],["path",{d:"m16.2 16.2 2.9 2.9",key:"1bxg5t"}],["path",{d:"M12 18v4",key:"jadmvz"}],["path",{d:"m4.9 19.1 2.9-2.9",key:"bwix9q"}],["path",{d:"M2 12h4",key:"j09sii"}],["path",{d:"m4.9 4.9 2.9 2.9",key:"giyufr"}]]);/** 276 * @license lucide-react v0.441.0 - ISC 277 * 278 * This source code is licensed under the ISC license. 279 * See the LICENSE file in the root directory of this source tree. 280 */const so=X("Lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);/** 281 * @license lucide-react v0.441.0 - ISC 282 * 283 * This source code is licensed under the ISC license. 284 * See the LICENSE file in the root directory of this source tree. 285 */const gn=X("Mail",[["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7",key:"1ocrg3"}]]);/** 286 * @license lucide-react v0.441.0 - ISC 287 * 288 * This source code is licensed under the ISC license. 289 * See the LICENSE file in the root directory of this source tree. 290 */const oo=X("MapPin",[["path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0",key:"1r0f0z"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}]]);/** 291 * @license lucide-react v0.441.0 - ISC 292 * 293 * This source code is licensed under the ISC license. 294 * See the LICENSE file in the root directory of this source tree. 295 */const oT=X("Maximize2",[["polyline",{points:"15 3 21 3 21 9",key:"mznyad"}],["polyline",{points:"9 21 3 21 3 15",key:"1avn1i"}],["line",{x1:"21",x2:"14",y1:"3",y2:"10",key:"ota7mn"}],["line",{x1:"3",x2:"10",y1:"21",y2:"14",key:"1atl0r"}]]);/** 296 * @license lucide-react v0.441.0 - ISC 297 * 298 * This source code is licensed under the ISC license. 299 * See the LICENSE file in the root directory of this source tree. 300 */const lT=X("Maximize",[["path",{d:"M8 3H5a2 2 0 0 0-2 2v3",key:"1dcmit"}],["path",{d:"M21 8V5a2 2 0 0 0-2-2h-3",key:"1e4gt3"}],["path",{d:"M3 16v3a2 2 0 0 0 2 2h3",key:"wsl5sc"}],["path",{d:"M16 21h3a2 2 0 0 0 2-2v-3",key:"18trek"}]]);/** 301 * @license lucide-react v0.441.0 - ISC 302 * 303 * This source code is licensed under the ISC license. 304 * See the LICENSE file in the root directory of this source tree. 305 */const cT=X("Menu",[["line",{x1:"4",x2:"20",y1:"12",y2:"12",key:"1e0a9i"}],["line",{x1:"4",x2:"20",y1:"6",y2:"6",key:"1owob3"}],["line",{x1:"4",x2:"20",y1:"18",y2:"18",key:"yk5zj1"}]]);/** 306 * @license lucide-react v0.441.0 - ISC 307 * 308 * This source code is licensed under the ISC license. 309 * See the LICENSE file in the root directory of this source tree. 310 */const uT=X("MessageCircle",[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}]]);/** 311 * @license lucide-react v0.441.0 - ISC 312 * 313 * This source code is licensed under the ISC license. 314 * See the LICENSE file in the root directory of this source tree. 315 */const Gc=X("MessageSquare",[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}]]);/** 316 * @license lucide-react v0.441.0 - ISC 317 * 318 * This source code is licensed under the ISC license. 319 * See the LICENSE file in the root directory of this source tree. 320 */const dT=X("Minimize",[["path",{d:"M8 3v3a2 2 0 0 1-2 2H3",key:"hohbtr"}],["path",{d:"M21 8h-3a2 2 0 0 1-2-2V3",key:"5jw1f3"}],["path",{d:"M3 16h3a2 2 0 0 1 2 2v3",key:"198tvr"}],["path",{d:"M16 21v-3a2 2 0 0 1 2-2h3",key:"ph8mxp"}]]);/** 321 * @license lucide-react v0.441.0 - ISC 322 * 323 * This source code is licensed under the ISC license. 324 * See the LICENSE file in the root directory of this source tree. 325 */const lo=X("Monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);/** 326 * @license lucide-react v0.441.0 - ISC 327 * 328 * This source code is licensed under the ISC license. 329 * See the LICENSE file in the root directory of this source tree. 330 */const na=X("Network",[["rect",{x:"16",y:"16",width:"6",height:"6",rx:"1",key:"4q2zg0"}],["rect",{x:"2",y:"16",width:"6",height:"6",rx:"1",key:"8cvhb9"}],["rect",{x:"9",y:"2",width:"6",height:"6",rx:"1",key:"1egb70"}],["path",{d:"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3",key:"1jsf9p"}],["path",{d:"M12 12V8",key:"2874zd"}]]);/** 331 * @license lucide-react v0.441.0 - ISC 332 * 333 * This source code is licensed under the ISC license. 334 * See the LICENSE file in the root directory of this source tree. 335 */const mT=X("Phone",[["path",{d:"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z",key:"foiqr5"}]]);/** 336 * @license lucide-react v0.441.0 - ISC 337 * 338 * This source code is licensed under the ISC license. 339 * See the LICENSE file in the root directory of this source tree. 340 */const Bg=X("Play",[["polygon",{points:"6 3 20 12 6 21 6 3",key:"1oa8hb"}]]);/** 341 * @license lucide-react v0.441.0 - ISC 342 * 343 * This source code is licensed under the ISC license. 344 * See the LICENSE file in the root directory of this source tree. 345 */const Ma=X("Plug",[["path",{d:"M12 22v-5",key:"1ega77"}
345],["path",{d:"M9 8V2",key:"14iosj"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z",key:"osxo6l"}]]);/** 346 * @license lucide-react v0.441.0 - ISC 347 * 348 * This source code is licensed under the ISC license. 349 * See the LICENSE file in the root directory of this source tree. 350 */const Qc=X("Quote",[["path",{d:"M16 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z",key:"rib7q0"}],["path",{d:"M5 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z",key:"1ymkrd"}]]);/** 351 * @license lucide-react v0.441.0 - ISC 352 * 353 * This source code is licensed under the ISC license. 354 * See the LICENSE file in the root directory of this source tree. 355 */const f1=X("Radar",[["path",{d:"M19.07 4.93A10 10 0 0 0 6.99 3.34",key:"z3du51"}],["path",{d:"M4 6h.01",key:"oypzma"}],["path",{d:"M2.29 9.62A10 10 0 1 0 21.31 8.35",key:"qzzz0"}],["path",{d:"M16.24 7.76A6 6 0 1 0 8.23 16.67",key:"1yjesh"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M17.99 11.66A6 6 0 0 1 15.77 16.67",key:"1u2y91"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"m13.41 10.59 5.66-5.66",key:"mhq4k0"}]]);/** 356 * @license lucide-react v0.441.0 - ISC 357 * 358 * This source code is licensed under the ISC license. 359 * See the LICENSE file in the root directory of this source tree. 360 */const Kc=X("Radio",[["path",{d:"M4.9 19.1C1 15.2 1 8.8 4.9 4.9",key:"1vaf9d"}],["path",{d:"M7.8 16.2c-2.3-2.3-2.3-6.1 0-8.5",key:"u1ii0m"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"M16.2 7.8c2.3 2.3 2.3 6.1 0 8.5",key:"1j5fej"}],["path",{d:"M19.1 4.9C23 8.8 23 15.1 19.1 19",key:"10b0cb"}]]);/** 361 * @license lucide-react v0.441.0 - ISC 362 * 363 * This source code is licensed under the ISC license. 364 * See the LICENSE file in the root directory of this source tree. 365 */const Xc=X("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);/** 366 * @license lucide-react v0.441.0 - ISC 367 * 368 * This source code is licensed under the ISC license. 369 * See the LICENSE file in the root directory of this source tree. 370 */const g1=X("RotateCcw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]);/** 371 * @license lucide-react v0.441.0 - ISC 372 * 373 * This source code is licensed under the ISC license. 374 * See the LICENSE file in the root directory of this source tree. 375 */const at=X("Search",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]);/** 376 * @license lucide-react v0.441.0 - ISC 377 * 378 * This source code is licensed under the ISC license. 379 * See the LICENSE file in the root directory of this source tree. 380 */const Us=X("Settings",[["path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z",key:"1qme2f"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** 381 * @license lucide-react v0.441.0 - ISC 382 * 383 * This source code is licensed under the ISC license. 384 * See the LICENSE file in the root directory of this source tree. 385 */const gi=X("ShieldCheck",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** 386 * @license lucide-react v0.441.0 - ISC 387 * 388 * This source code is licensed under the ISC license. 389 * See the LICENSE file in the root directory of this source tree. 390 */const qe=X("Shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",ke
390y:"oel41y"}]]);/** 391 * @license lucide-react v0.441.0 - ISC 392 * 393 * This source code is licensed under the ISC license. 394 * See the LICENSE file in the root directory of this source tree. 395 */const tt=X("Sparkles",[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z",key:"4pj2yx"}],["path",{d:"M20 3v4",key:"1olli1"}],["path",{d:"M22 5h-4",key:"1gvqau"}],["path",{d:"M4 17v2",key:"vumght"}],["path",{d:"M5 18H3",key:"zchphs"}]]);/** 396 * @license lucide-react v0.441.0 - ISC 397 * 398 * This source code is licensed under the ISC license. 399 * See the LICENSE file in the root directory of this source tree. 400 */const x1=X("Star",[["polygon",{points:"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2",key:"8f66p6"}]]);/** 401 * @license lucide-react v0.441.0 - ISC 402 * 403 * This source code is licensed under the ISC license. 404 * See the LICENSE file in the root directory of this source tree. 405 */const pT=X("Tags",[["path",{d:"m15 5 6.3 6.3a2.4 2.4 0 0 1 0 3.4L17 19",key:"1cbfv1"}],["path",{d:"M9.586 5.586A2 2 0 0 0 8.172 5H3a1 1 0 0 0-1 1v5.172a2 2 0 0 0 .586 1.414L8.29 18.29a2.426 2.426 0 0 0 3.42 0l3.58-3.58a2.426 2.426 0 0 0 0-3.42z",key:"135mg7"}],["circle",{cx:"6.5",cy:"9.5",r:".5",fill:"currentColor",key:"5pm5xn"}]]);/** 406 * @license lucide-react v0.441.0 - ISC 407 * 408 * This source code is licensed under the ISC license. 409 * See the LICENSE file in the root directory of this source tree. 410 */const Fg=X("Target",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"6",key:"1vlfrh"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]]);/** 411 * @license lucide-react v0.441.0 - ISC 412 * 413 * This source code is licensed under the ISC license. 414 * See the LICENSE file in the root directory of this source tree. 415 */const Pn=X("Terminal",[["polyline",{points:"4 17 10 11 4 5",key:"akl6gq"}],["line",{x1:"12",x2:"20",y1:"19",y2:"19",key:"q2wloq"}]]);/** 416 * @license lucide-react v0.441.0 - ISC 417 * 418 * This source code is licensed under the ISC license. 419 * See the LICENSE file in the root directory of this source tree. 420 */const y1=X("TrendingUp",[["polyline",{points:"22 7 13.5 15.5 8.5 10.5 2 17",key:"126l90"}],["polyline",{points:"16 7 22 7 22 13",key:"kwv8wd"}]]);/** 421 * @license lucide-react v0.441.0 - ISC 422 * 423 * This source code is licensed under the ISC license. 424 * See the LICENSE file in the root directory of this source tree. 425 */const Zn=X("TriangleAlert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** 426 * @license lucide-react v0.441.0 - ISC 427 * 428 * This source code is licensed under the ISC license. 429 * See the LICENSE file in the root directory of this source tree. 430 */const hT=X("Twitter",[["path",{d:"M22 4s-.7 2.1-2 3.4c1.6 10-9.4 17.3-18 11.6 2.2.1 4.4-.6 6-2C3 15.5.5 9.6 3 5c2.2 2.6 5.6 4.1 9 4-.9-4.2 4-6.6 7-3.8 1.1 0 3-1.2 3-1.2z",key:"pff0z6"}]]);/** 431 * @license lucide-react v0.441.0 - ISC 432 * 433 * This source code is licensed under the ISC license. 434 * See the LICENSE file in the root directory of this source tree. 435 */const fT=X("User",[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]]);/** 436 * @license lucide-react v0.441.0 - ISC 437 * 438 * This source code is licensed under the ISC license. 439 * See the LICENSE file in the root directory of this source tree. 440 */const b1=X("Users",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["path",{d:"M16 3.13a4 4 0 0 1 0 7.75",key:"1da9ce"}]]);/** 441 * @license lucide-react v0.441.0 - ISC 442 * 443 * This source code is licensed under the ISC license. 444 * See the LICENSE file in the root directory of this source tree. 445 */const Zc=X("Wifi",[["path",{d:"M12 20h.01",key:"zekei9"}
vendor: 4,936 bytes, lines 445-474
445],["path",{d:"M2 8.82a15 15 0 0 1 20 0",key:"dnpr2z"}],["path",{d:"M5 12.859a10 10 0 0 1 14 0",key:"1x1e6c"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}]]);/** 446 * @license lucide-react v0.441.0 - ISC 447 * 448 * This source code is licensed under the ISC license. 449 * See the LICENSE file in the root directory of this source tree. 450 */const Hg=X("Wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z",key:"cbrjhi"}]]);/** 451 * @license lucide-react v0.441.0 - ISC 452 * 453 * This source code is licensed under the ISC license. 454 * See the LICENSE file in the root directory of this source tree. 455 */const v1=X("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);/** 456 * @license lucide-react v0.441.0 - ISC 457 * 458 * This source code is licensed under the ISC license. 459 * See the LICENSE file in the root directory of this source tree. 460 */const gT=X("Youtube",[["path",{d:"M2.5 17a24.12 24.12 0 0 1 0-10 2 2 0 0 1 1.4-1.4 49.56 49.56 0 0 1 16.2 0A2 2 0 0 1 21.5 7a24.12 24.12 0 0 1 0 10 2 2 0 0 1-1.4 1.4 49.55 49.55 0 0 1-16.2 0A2 2 0 0 1 2.5 17",key:"1q2vi4"}],["path",{d:"m10 15 5-3-5-3z",key:"1jp15x"}]]);/** 461 * @license lucide-react v0.441.0 - ISC 462 * 463 * This source code is licensed under the ISC license. 464 * See the LICENSE file in the root directory of this source tree. 465 */const xn=X("Zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]);/** 466 * @remix-run/router v1.23.4 467 * 468 * Copyright (c) Remix Software Inc. 469 * 470 * This source code is licensed under the MIT license found in the 471 * LICENSE.md file in the root directory of this source tree. 472 * 473 * @license MIT 474 */function Vs(){return Vs=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},Vs.apply(null,arguments)}var xa;(function(e){e.Pop="POP",e.Push="PUSH",e.Replace="REPLACE"})(xa||(xa={}));const Ug="popstate";function xT(e){e===void 0&&(e={});function t(a,r){let{pathname:s,search:o,hash:l}=a.location;return Tm("",{pathname:s,search:o,hash:l},r.state&&r.state.usr||null,r.state&&r.state.key||"default")}function n(a,r){return typeof r=="string"?r:rc(r)}return bT(t,n,null,e)}function Be(e,t){if(e===!1||e===null||typeof e>"u")throw new Error(t)}function w1(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function yT(){return Math.random().toString(36).substr(2,8)}function Vg(e,t){return{usr:e.state,key:e.key,idx:t}}function Tm(e,t,n,a){return n===void 0&&(n=null),Vs({pathname:typeof e=="string"?e:e.pathname,search:"",hash:""},typeof t=="string"?vr(t):t,{state:n,key:t&&t.key||a||yT()})}function rc(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 vr(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 bT(e,t,n,a){a===void 0&&(a={});let{window:r=document.defaultView,v5Compat:s=!1}=a,o=r.history,l=xa.Pop,c=null,u=d();u==null&&(u=0,o.replaceState(Vs({},o.state,{idx:u}),""));function d(){return(o.state||{idx:null}).idx}function m(){l=xa.Pop;let w=d(),x=w==null?null:w-u;u=w,c&&c({action:l,location:y.location,delta:x})}function p(w,x){l=xa.Push;let b=Tm(y.location,w,x);u=d()+1;let v=Vg(b,u),N=y.createHref(b);try{o.pushState(v,"",N)}catch(I){if(I instanceof DOMException&&I.name==="DataCloneError")throw I;r.location.assign(N)}s&&c&&c({action:l,location:y.location,delta:1})}function f(w,x){l=xa.Replace;let b=Tm(y.location,w,x);u=d();let v=Vg(b,u),N=y.createHref(b);o.replaceState(v,"",N),s&&c&&c({action:l,location:y.location,delta:0})}function g(w){let x=r.location.origin!=="null"?r.location.origin:r.location.href,b=typeof w=="string"?w:rc(w);return b=b.replace(/ $/,"%20"),Be(x,"No window.location.(origin|href) available to create URL for href: "+b),new URL(b,x)}let y={get action(){return l},get location(){return e(r,o)},listen(w){if(c)throw new Error("A history only accepts one active listener");return r.addEventListener(Ug,m),c=w,()=>{r.removeEventListener(Ug,m),c=null}},createHref(w){return t(r,w)},createURL:g,encodeLocation(w){let x=g(w);return{pathname:x.pathname,search:x.search,hash:x.hash}},push:p,replace:f,go(w){return o.go(w)}};return y}var Wg;(function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"})(Wg||(Wg={}));function vT(e,t,n){return n===void 0&&(n="/"),wT(e,t,n)}function wT(e,t,n,a){let r=typeof t=="string"?vr(t):t,s=yh(r.pathname||"/",n);if(s==null)return null;let o=k1(e);kT(o);let l=null,c=RT(s);for(let u=0;l==null&&u<o.length;
vendor: 8,903 bytes, lines 474-483
474++u)l=PT(o[u],c);return l}function k1(e,t,n,a){t===void 0&&(t=[]),n===void 0&&(n=[]),a===void 0&&(a="");let r=(s,o,l)=>{let c={relativePath:l===void 0?s.path||"":l,caseSensitive:s.caseSensitive===!0,childrenIndex:o,route:s};c.relativePath.startsWith("/")&&(Be(c.relativePath.startsWith(a),'Absolute route path "'+c.relativePath+'" nested under path '+('"'+a+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),c.relativePath=c.relativePath.slice(a.length));let u=Sa([a,c.relativePath]),d=n.concat(c);s.children&&s.children.length>0&&(Be(s.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+u+'".')),k1(s.children,t,d,u)),!(s.path==null&&!s.index)&&t.push({path:u,score:IT(u,s.index),routesMeta:d})};return e.forEach((s,o)=>{var l;if(s.path===""||!((l=s.path)!=null&&l.includes("?")))r(s,o);else for(let c of A1(s.path))r(s,o,c)}),t}function A1(e){let t=e.split("/");if(t.length===0)return[];let[n,...a]=t,r=n.endsWith("?"),s=n.replace(/\?$/,"");if(a.length===0)return r?[s,""]:[s];let o=A1(a.join("/")),l=[];return l.push(...o.map(c=>c===""?s:[s,c].join("/"))),r&&l.push(...o),l.map(c=>e.startsWith("/")&&c===""?"/":c)}function kT(e){e.sort((t,n)=>t.score!==n.score?n.score-t.score:jT(t.routesMeta.map(a=>a.childrenIndex),n.routesMeta.map(a=>a.childrenIndex)))}const AT=/^:[\w-]+$/,CT=3,ET=2,NT=1,TT=10,ST=-2,$g=e=>e==="*";function IT(e,t){let n=e.split("/"),a=n.length;return n.some($g)&&(a+=ST),t&&(a+=ET),n.filter(r=>!$g(r)).reduce((r,s)=>r+(AT.test(s)?CT:s===""?NT:TT),a)}function jT(e,t){return e.length===t.length&&e.slice(0,-1).every((a,r)=>a===t[r])?e[e.length-1]-t[t.length-1]:0}function PT(e,t,n){let{routesMeta:a}=e,r={},s="/",o=[];for(let l=0;l<a.length;++l){let c=a[l],u=l===a.length-1,d=s==="/"?t:t.slice(s.length)||"/",m=MT({path:c.relativePath,caseSensitive:c.caseSensitive,end:u},d),p=c.route;if(!m)return null;Object.assign(r,m.params),o.push({params:r,pathname:Sa([s,m.pathname]),pathnameBase:LT(Sa([s,m.pathnameBase])),route:p}),m.pathnameBase!=="/"&&(s=Sa([s,m.pathnameBase]))}return o}function MT(e,t){typeof e=="string"&&(e={path:e,caseSensitive:!1,end:!0});let[n,a]=DT(e.path,e.caseSensitive,e.end),r=t.match(n);if(!r)return null;let s=r[0],o=s.replace(/(.)\/+$/,"$1"),l=r.slice(1);return{params:a.reduce((u,d,m)=>{let{paramName:p,isOptional:f}=d;if(p==="*"){let y=l[m]||"";o=s.slice(0,s.length-y.length).replace(/(.)\/+$/,"$1")}const g=l[m];return f&&!g?u[p]=void 0:u[p]=(g||"").replace(/%2F/g,"/"),u},{}),pathname:s,pathnameBase:o,pattern:e}}function DT(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!0),w1(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=[],r="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(o,l,c)=>(a.push({paramName:l,isOptional:c!=null}),c?"/?([^\\/]+)?":"/([^\\/]+)"));return e.endsWith("*")?(a.push({paramName:"*"}),r+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?r+="\\/*$":e!==""&&e!=="/"&&(r+="(?:(?=\\/|$))"),[new RegExp(r,t?void 0:"i"),a]}function RT(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return w1(!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 yh(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)||"/"}function OT(e,t){t===void 0&&(t="/");let{pathname:n,search:a="",hash:r=""}=typeof e=="string"?vr(e):e,s;return n?(n=C1(n),n.startsWith("/")?s=Yg(n.substring(1),"/"):s=Yg(n,t)):s=t,{pathname:s,search:zT(a),hash:qT(r)}}function Yg(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(r=>{r===".."?n.length>1&&n.pop():r!=="."&&n.push(r)}),n.length>1?n.join("/"):"/"}function Qu(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 <Link to="..."> and the router will parse it for you.'}function _T(e){return e.filter((t,n)=>n===0||t.route.path&&t.route.path.length>0)}function bh(e,t){let n=_T(e);return t?n.map((a,r)=>r===n.length-1?a.pathname:a.pathnameBase):n.map(a=>a.pathnameBase)}function vh(e,t,n,a){a===void 0&&(a=!1);let r;typeof e=="string"?r=vr(e):(r=Vs({},e),Be(!r.pathname||!r.pathname.includes("?"),Qu("?","pathname","search",r)),Be(!r.pathname||!r.pathname.includes("#"),Qu("#","pathname","hash",r)),Be(!r.search||!r.search.includes("#"),Qu("#","search","hash",r)));let s=e===""||r.pathname==="",o=s?"/":r.pathname,l;if(o==null)l=n;else{let m=t.length-1;if(!a&&o.startsWith("..")){let p=o.split("/");for(;p[0]==="..";)p.shift(),m-=1;r.pathname=p.join("/")}l=m>=0?t[m]:"/"}let c=OT(r,l),u=o&&o!=="/"&&o.endsWith("/"),d=(s||o===".")&&n.endsWith("/");return!c.pathname.endsWith("/")&&(u||d)&&(c.pathname+="/"),c}const C1=e=>e.replace(/\/\/+/g,"/"),Sa=e=>C1(e.join("/")),LT=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),zT=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,qT=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;function BT(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}const E1=["post","put","patch","delete"];new Set(E1);const FT=["get",...E1];new Set(FT);/** 475 * React Router v6.30.6 476 * 477 * Copyright (c) Remix Software Inc. 478 * 479 * This source code is licensed under the MIT license found in the 480 * LICENSE.md file in the root directory of this source tree. 481 * 482 * @license MIT 483 */function Ws(){return Ws=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},Ws.apply(null,arguments)}const wh=T.createContext(null),HT=T.createContext(null),qa=T.createContext(null),Jc=T.createContext(null),aa=T.createContext({outlet:null,matches:[],isDataRoute:!1}),N1=T.createContext(null);function UT(e,t){let{relative:n}=t===void 0?{}:t;wr()||Be(!1);let{basename:a,navigator:r}=T.useContext(qa),{hash:s,pathname:o,search:l}=S1(e,{relative:n}),c=o;return a!=="/"&&(c=o==="/"?a:Sa([a,o])),r.createHref({pathname:c,search:l,hash:s})}function wr(){return T.useContext(Jc)!=null}function ia(){return wr()||Be(!1),T.useContext(Jc).location}function T1(e){T.useContext(qa).static||T.useLayoutEffect(e)}function kh(){let{isDataRoute:e}=T.useContext(aa);return e?aS():VT()}function VT(){wr()||Be(!1);let e=T.useContext(wh),{basename:t,future:n,navigator:a}=T.useContext(qa),{matches:r}=T.useContext(aa),{pathname:s}=ia(),o=JSON.stringify(bh(r,n.v7_relativeSplatPath)),l=T.useRef(!1);return T1(()=>{l.current=!0}),T.useCallback(function(u,d){if(d===void 0&&(d={}),!l.current)return;if(typeof u=="number"){a.go(u);return}let m=vh(u,JSON.parse(o),s,d.relative==="path");e==null&&t!=="/"&&(m.pathname=m.pathname==="/"?t:Sa([t,m.pathname])),(d.replace?a.replace:a.push)(m,d.state,d)},[t,a,o,s,e])}function WT(){let{matches:e}=T.useContext(aa),t=e[e.length-1];return t?t.params:{}}function S1(e,t){let{relative:n}=t===void 0?{}:t,{future:a}=T.useContext(qa),{matches:r}=T.useContext(aa),{pathname:s}=ia(),o=JSON.stringify(bh(r,a.v7_relativeSplatPath));return T.useMemo(()=>vh(e,JSON.parse(o),s,n==="path"),[e,o,s,n])}function $T(e,t){return YT(e,t)}function YT(e,t,n,a){wr()||Be(!1);let{navigator:r}=T.useContext(qa),{matches:s}=T.useContext(aa),o=s[s.length-1],l=o?o.params:{};o&&o.pathname;let c=o?o.pathnameBase:"/";o&&o.route;let u=ia(),d;if(t){var m;let w=typeof t=="string"?vr(t):t;c==="/"||(m=w.pathname)!=null&&m.startsWith(c)||Be(!1),d=w}else d=u;let p=d.pathname||"/",f=p;if(c!=="/"){let w=c.replace(/^\//,"").split("/");f="/"+p.replace(/^\//,"").split("/").slice(w.length).join("/")}let g=vT(e,{pathname:f}),y=ZT(g&&g.map(w=>Object.assign({},w,{params:Object.assign({},l,w.params),pathname:Sa([c,r.encodeLocation?r.encodeLocation(w.pathname).pathname:w.pathname]),pathnameBase:w.pathnameBase==="/"?c:Sa([c,r.encodeLocation?r.encodeLocation(w.pathnameBase).pathname:w.pathnameBase])})),s,n,a);return t&&y?T.createElement(Jc.Provider,{value:{location:Ws({pathname:"/",search:"",hash:"",state:null,key:"default"},d),navigationType:xa.Pop}},y):y}function GT(){let e=nS(),t=BT(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,r={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return T.createElement(T.Fragment,null,T.createElement("h2",null,"Unexpected Application
483Error!"),T.createElement("h3",{style:{fontStyle:"italic"}},t),n?T.createElement("pre",{style:r},n):null,null)}const QT=T.createElement(GT,null);class KT extends T.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?T.createElement(aa.Provider,{value:this.props.routeContext},T.createElement(N1.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function XT(e){let{routeContext:t,match:n,children:a}=e,r=T.useContext(wh);return r&&r.static&&r.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=n.route.id),T.createElement(aa.Provider,{value:t},a)}function ZT(e,t,n,a){var r;if(t===void 0&&(t=[]),n===void 0&&(n=null),a===void 0&&(a=null),e==null){var s;if(!n)return null;if(n.errors)e=n.matches;else if((s=a)!=null&&s.v7_partialHydration&&t.length===0&&!n.initialized&&n.matches.length>0)e=n.matches;else return null}let o=e,l=(r=n)==null?void 0:r.errors;if(l!=null){let d=o.findIndex(m=>m.route.id&&(l==null?void 0:l[m.route.id])!==void 0);d>=0||Be(!1),o=o.slice(0,Math.min(o.length,d+1))}let c=!1,u=-1;if(n&&a&&a.v7_partialHydration)for(let d=0;d<o.length;d++){let m=o[d];if((m.route.HydrateFallback||m.route.hydrateFallbackElement)&&(u=d),m.route.id){let{loaderData:p,errors:f}=n,g=m.route.loader&&p[m.route.id]===void 0&&(!f||f[m.route.id]===void 0);if(m.route.lazy||g){c=!0,u>=0?o=o.slice(0,u+1):o=[o[0]];break}}}return o.reduceRight((d,m,p)=>{let f,g=!1,y=null,w=null;n&&(f=l&&m.route.id?l[m.route.id]:void 0,y=m.route.errorElement||QT,c&&(u<0&&p===0?(iS("route-fallback"),g=!0,w=null):u===p&&(g=!0,w=m.route.hydrateFallbackElement||null)));let x=t.concat(o.slice(0,p+1)),b=()=>{let v;return f?v=y:g?v=w:m.route.Component?v=T.createElement(m.route.Component,null):m.route.element?v=m.route.element:v=d,T.createElement(XT,{match:m,routeContext:{outlet:d,matches:x,isDataRoute:n!=null},children:v})};return n&&(m.route.ErrorBoundary||m.route.errorElement||p===0)?T.createElement(KT,{location:n.location,revalidation:n.revalidation,component:y,error:f,children:b(),routeContext:{outlet:null,matches:x,isDataRoute:!0}}):b()},null)}var I1=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(I1||{}),j1=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}(j1||{});function JT(e){let t=T.useContext(wh);return t||Be(!1),t}function eS(e){let t=T.useContext(HT);return t||Be(!1),t}function tS(e){let t=T.useContext(aa);return t||Be(!1),t}function P1(e){let t=tS(),n=t.matches[t.matches.length-1];return n.route.id||Be(!1),n.route.id}function nS(){var e;let t=T.useContext(N1),n=eS(),a=P1();return t!==void 0?t:(e=n.errors)==null?void 0:e[a]}function aS(){let{router:e}=JT(I1.UseNavigateStable),t=P1(j1.UseNavigateStable),n=T.useRef(!1);return T1(()=>{n.current=!0}),T.useCallback(function(r,s){s===void 0&&(s={}),n.current&&(typeof r=="number"?e.navigate(r):e.navigate(r,Ws({fromRouteId:t},s)))},[e,t])}const Gg={};function iS(e,t,n){Gg[e]||(Gg[e]=!0)}function rS(e,t){e==null||e.v7_startTransition,e==null||e.v7_relativeSplatPath}function sS(e){let{to:t,replace:n,state:a,relative:r}=e;wr()||Be(!1);let{future:s,static:o}=T.useContext(qa),{matches:l}=T.useContext(aa),{pathname:c}=ia(),u=kh(),d=vh(t,bh(l,s.v7_relativeSplatPath),c,r==="path"),m=JSON.stringify(d);return T.useEffect(()=>u(JSON.parse(m),{replace:n,state:a,relative:r}),[u,m,r,n,a]),null}function Se(e){Be(!1)}function oS(e){let{basename:t="/",children:n=null,location:a,navigationType:r=xa.Pop,navigator:s,static:o=!1,future:l}=e;wr()&&Be(!1);let c=t.replace(/^\/*/,"/"),u=T.useMemo(()=>({basename:c,navigator:s,static:o,future:Ws({v7_relativeSplatPath:!1},l)}),[c,l,s,o]);
483typeof a=="string"&&(a=vr(a));let{pathname:d="/",search:m="",hash:p="",state:f=null,key:g="default"}=a,y=T.useMemo(()=>{let w=yh(d,c);return w==null?null:{location:{pathname:w,search:m,hash:p,state:f,key:g},navigationType:r}},[c,d,m,p,f,g,r]);return y==null?null:T.createElement(qa.Provider,{value:u},T.createElement(Jc.Provider,{children:n,value:y}))}function lS(e){let{children:t,location:n}=e;return $T(Sm(t),n)}new Promise(()=>{});function Sm(e,t){t===void 0&&(t=[]);let n=[];return T.Children.forEach(e,(a,r)=>{if(!T.isValidElement(a))return;let s=[...t,r];if(a.type===T.Fragment){n.push.apply(n,Sm(a.props.children,s));return}a.type!==Se&&Be(!1),!a.props.index||!a.props.children||Be(!1);let o={id:a.props.id||s.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=Sm(a.props.children,s)),n.push(o)}),n}/** 484 * React Router DOM v6.30.6 485 * 486 * Copyright (c) Remix Software Inc. 487 * 488 * This source code is licensed under the MIT license found in the 489 * LICENSE.md file in the root directory of this source tree. 490 * 491 * @license MIT 492 */function Im(){return Im=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},Im.apply(null,arguments)}function cS(e,t){if(e==null)return{};var n={};for(var a in e)if({}.hasOwnProperty.call(e,a)){if(t.indexOf(a)!==-1)continue;n[a]=e[a]}return n}function uS(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function dS(e,t){return e.button===0&&(!t||t==="_self")&&!uS(e)}function jm(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(r=>[n,r]):[[n,a]])},[]))}function mS(e,t){let n=jm(e);return t&&t.forEach((a,r)=>{n.has(r)||t.getAll(r).forEach(s=>{n.append(r,s)})}),n}const pS=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","viewTransition"],hS="6";try{window.__reactRouterVersion=hS}catch{}const fS="startTransition",Qg=cC[fS];function gS(e){let{basename:t,children:n,future:a,window:r}=e,s=T.useRef();s.current==null&&(s.current=xT({window:r,v5Compat:!0}));let o=s.current,[l,c]=T.useState({action:o.action,location:o.location}),{v7_startTransition:u}=a||{},d=T.useCallback(m=>{u&&Qg?Qg(()=>c(m)):c(m)},[c,u]);return T.useLayoutEffect(()=>o.listen(d),[o,d]),T.useEffect(()=>rS(a),[a]),T.createElement(oS,{basename:t,children:n,location:l.location,navigationType:l.action,navigator:o,future:a})}const xS=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",yS=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Ne=T.forwardRef(function(t,n){let{onClick:a,relative:r,reloadDocument:s,replace:o,state:l,target:c,to:u,preventScrollReset:d,viewTransition:m}=t,p=cS(t,pS),{basename:f}=T.useContext(qa),g,y=!1;if(typeof u=="string"&&yS.test(u)&&(g=u,xS))try{let v=new URL(window.location.href),N=u.startsWith("//")?new URL(v.protocol+u):new URL(u),I=yh(N.pathname,f);N.origin===v.origin&&I!=null?u=I+N.search+N.hash:y=!0}catch{}let w=UT(u,{relative:r}),x=bS(u,{replace:o,state:l,target:c,preventScrollReset:d,relative:r,viewTransition:m});function b(v){a&&a(v),v.defaultPrevented||x(v)}return T.createElement("a",Im({},p,{href:g||w,onClick:y||s?a:b,ref:n,target:c}))});var Kg;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(Kg||(Kg={}));var Xg;(function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(Xg||(Xg={}));function bS(e,t){let{target:n,replace:a,state:r,preventScrollReset:s,relative:o,viewTransition:l}=t===void 0?{}:t,c=kh(),u=ia(),d=S1(e,{relative:o});return T.useCallback(m=>{if(dS(m,n)){m.preventDefault();let p=a!==void 0?a:rc(u)===rc(d);c(e,{replace:p,state:r,preventScrollReset:s,relative:o,viewTransition:l})}},[u,c,d,a,r,n,e,s,o,l])}function M1(e){let t=T.useRef(jm(e)),n=T.useRef(!1),a=ia(),r=T.useMemo(()=>mS(a.search,n.current?null:t.current),[a.search]),s=kh(),o=T.useCallback((l,c)=>{const u=jm(typeof l=="function"?l(r):l);n.current=!0,s("?"+u,c)},[s,r]);return[r,o]}const Ah=T.createContext({});function Ch(e){const t=T.useRef(null);return t.current===null&&(t.current=e()),t.current}const vS=typeof window<"u",Eh=vS?T.useLayoutEffect:T.useEffect,eu=T.createContext(null);function Nh(e,t){e.indexOf(t)===-1&&e.push(t)}function sc(e,t){const n=e.indexOf(t);n>-1&&e.splice(n,1)}const Mn=(e,t,n)=>n>t?t:n<e?e:n;let tu=()=>{};const Da={},D1=e=>/^-?(?:\d+(?:\.\d+)?|\.\d+)$/u.test(e),R1=e=>typeof e=="object"&&e!==null,O1=e=>/^0[^.\s]+$/u.test(e);function _1(e){let t;return()=>(t===void 0&&(t=e()),t)}const Kt=e=>e,co=(...e)=>e.reduce((t,n)=>a=>n(t(a))),$s=(e,t,n)=>{const a=t-e;return a?(n-e)/a:1};class Th{constructor(){this.subscriptions=[]}add(t){return Nh(this.subscriptions,t),()=>sc(this.subscriptions,t)}notify(t,n,a){const r=this.subscriptions.length;if(r)if(r===1)this.subscriptions[0](t,n,a);else for(let s=0;s<r;s++){const o=this.subscriptions[s];o&&o(t,n,a)}}getSize(){return this.subscriptions.length}clear(){this.subscriptions.length=0}}const _t=e=>e*1e3,Gt=e=>e/1e3,L1=(e,t)=>t?e*(1e3/t):0,z1=(e,t,n)=>(((1-3*n+3*t)*e+(3*n-6*t))*e+3*t)*e,wS=1e-7,kS=12;function AS(e,t,n,a,r){let s,o,l=0;do o=t+(n-t)/2,s=z1(o,a,r)-e,s>0?n=o:t=o;while(Math.abs(s)>wS&&++l<kS);return o}function uo(e,t,n,a){if(e===t&&n===a)return Kt;const r=s=>AS(s,0,1,e,n);return s=>s===0||s===1?s:z1(r(s),t,a)}const q1=e=>t=>t<=.5?e(2*t)/2:(2-e(2*(1-t)))/2,B1=e=>t=>1-e(1-t),F1=uo(.33,1.53,.69,.99),Sh=B1(F1),H1=q1(Sh),U1=e=>e>=1?1:(e*=2)<1?.5*Sh(e):.5*(2-Math.pow(2,-10*(e-1))),Ih=e=>1-Math.sin(Math.acos(e)),V1=B1(Ih),W1=q1(Ih),CS=uo(.42,0,1,1),ES=uo(0,0,.58,1),$1=uo(.42,0,.58,1),NS=e=>Array.isArray(e)&&typeof e[0]!="number",Y1=e=>Array.isArray(e)&&typeof e[0]=="number",TS={linear:Kt,easeIn:CS,easeInOut:$1,easeOut:ES,circIn:Ih,circInOut:W1,circOut:V1,backIn:Sh,backInOut:H1,backOut:F1,anticipate:U1},SS=e=>typeof e=="string",Zg=e=>{if(Y1(e)){tu(e.length===4);const[t,n,a,r]=e;return uo(t,n,a,r)}else if(SS(e))return TS[e];return e},Ho=["setup","read","resolveKeyframes","preUpdate","update","preRender","render","postRender"];function IS(e){let t=new Set,n=new Set,a=!1,r=!1;const s=new WeakSet;let o={delta:0,timestamp:0,isProcessing:!1};function l(u){s.has(u)&&(c.schedule(u),e()),u(o)}const c={schedule:(u,d=!1,m=!1)=>{const f=m&&a?t:n;return d&&s.add(u),f.add(u),u},cancel:u=>{n.delete(u),s.delete(u)},process:u=>{if(o=u,a){r=!0;return}a=!0;const d=t;t=n,n=d,t.forEach(l),t.clear(),a=!1,r&&(r=!1,c.process(u))}};return c}const jS=40;function G1(e,t){let n=!1,a=!0;const r={delta:0,timestamp:0,isProcessing:!1},s=()=>n=!0,o=Ho.reduce((v,N)=>(v[N]=IS(s),v),{}),{setup:l,read:c,resolveKeyframes:u,preUpdate:d,update:m,preRender:p,render:f,postRender:g}=o,y=()=>{const v=Da.useManualTiming,N=v?r.timestamp:performance.now();n=!1,v||(r.delta=a?1e3/60:Math.max(Math.min(N-r.timestamp,jS),1)),r.timestamp=N,r.isProcessing=!0,l.process(r),c.process(r),u.process(r),d.process(r),m.process(r),p.process(r),f.process(r),g.process(r),r.isProcessing=!1,n&&t&&(a=!1,e(y))},w=()=>{n=!0,a=!0,r.isProcessing||e(y)};return{schedule:Ho.reduce((v,N)=>{const I=o[N];return v[N]=(C,R=!1,O=!1)=>(n||w(),I.schedule(C,R,O)),v},{}),cancel:v=>{for(let N=0;N<Ho.length;N++)o[Ho[N]].cancel(v)},state:r,steps:o}}const{schedule:ke,cancel:Ra,state:Ze,steps:Ku}=G1(typeof requestAnimationFrame<"u"?requestAnimationFrame:Kt,!0);let bl;function PS(){bl=void 0}const gt={now:()=>(bl===void 0&>.set(Ze.isProcessing||Da.useManualTiming?Ze.timestamp:performance.now()),bl),set:e=>{bl=e,queueMicrotask(PS)}},Q1=e=>t=>typeof t=="string"&&t.startsWith(e),K1=Q1("--"),MS=Q1("var(--"),jh=e=>MS(e)?DS.test(e.split("/*")[0].trim()):!1,DS=/var\(--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)$/iu;function Jg(e){return typeof e!="string"?!1:e.split("/*")[0].includes("var(--")}const kr={test:e=>typeof e=="number",parse:parseFloat,transform:e=>e},Ys={...kr,transform:e=>Mn(0,1,e)},Uo={...kr,default:1},ps=e=>Math.round(e*1e5)/1e5,Ph=/-?(?:\d+(?:\.\d+)?|\.\d+)/gu;function RS(e){return e==null}const OS=/^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))$/iu,Mh=(e,t)=>n=>!!(typeof n=="string"&&OS.test(n)&&n.startsWith(e)||t&&!RS(n)&&Object.prototype.hasOwnProperty.call(n,t)),X1=(e,t,n)=>a=>{if(typeof a!="string")return a;const[r,s,o,l]=a.match(Ph);return{[e]:parseFloat(r),[t]:parseFloat(s),[n]:parseFloat(o),alpha:l!==void 0?parseFloat(l):1}},_S=e=>Mn(0,255,e),Xu={...kr,transform:e=>Math.round(_S(e))},ei={test:Mh("rgb","red"),parse:X1("red","green","blue"),transform:({red:e,green:t,blue:n,alpha:a=1})=>"rgba("+Xu.transform(e)+", "+Xu.transform(t)+", "+Xu.transform(n)+", "+ps(Ys.transform(a))+")"};function LS(e){let t="",n="",a="",r="";return e.length>5?(t=e.substring(1,3),n=e.substring(3,5),a=e.substring(5,7),r=e.substring(7,9)):(t=e.substring(1,2),n=e.substring(2,3),a=e.substring(3,4),r=e.substring(4,5),t+=t,n+=n,a+=a,r+=r),{red:parseInt(t,16),green:parseInt(n,16),blue:parseInt(a,16),alph
vendor: 24,090 bytes, line 492
492a:r?parseInt(r,16)/255:1}}const Pm={test:Mh("#"),parse:LS,transform:ei.transform},mo=e=>({test:t=>typeof t=="string"&&t.endsWith(e)&&t.split(" ").length===1,parse:parseFloat,transform:t=>`${t}${e}`}),Bn=mo("deg"),Sn=mo("%"),ee=mo("px"),zS=mo("vh"),qS=mo("vw"),e0={...Sn,parse:e=>Sn.parse(e)/100,transform:e=>Sn.transform(e*100)},Wi={test:Mh("hsl","hue"),parse:X1("hue","saturation","lightness"),transform:({hue:e,saturation:t,lightness:n,alpha:a=1})=>"hsla("+Math.round(e)+", "+Sn.transform(ps(t))+", "+Sn.transform(ps(n))+", "+ps(Ys.transform(a))+")"},He={test:e=>ei.test(e)||Pm.test(e)||Wi.test(e),parse:e=>ei.test(e)?ei.parse(e):Wi.test(e)?Wi.parse(e):Pm.parse(e),transform:e=>typeof e=="string"?e:e.hasOwnProperty("red")?ei.transform(e):Wi.transform(e),getAnimatableNone:e=>{const t=He.parse(e);return t.alpha=0,He.transform(t)}},BS=/(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))/giu;function FS(e){var t,n;return isNaN(e)&&typeof e=="string"&&(((t=e.match(Ph))==null?void 0:t.length)||0)+(((n=e.match(BS))==null?void 0:n.length)||0)>0}const Z1="number",J1="color",HS="var",US="var(",t0="${}",VS=/var\s*\(\s*--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)|#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\)|-?(?:\d+(?:\.\d+)?|\.\d+)/giu;function dr(e){const t=e.toString(),n=[],a={color:[],number:[],var:[]},r=[];let s=0;const l=t.replace(VS,c=>(He.test(c)?(a.color.push(s),r.push(J1),n.push(He.parse(c))):c.startsWith(US)?(a.var.push(s),r.push(HS),n.push(c)):(a.number.push(s),r.push(Z1),n.push(parseFloat(c))),++s,t0)).split(t0);return{values:n,split:l,indexes:a,types:r}}function WS(e){return dr(e).values}function ew({split:e,types:t}){const n=e.length;return a=>{let r="";for(let s=0;s<n;s++)if(r+=e[s],a[s]!==void 0){const o=t[s];o===Z1?r+=ps(a[s]):o===J1?r+=He.transform(a[s]):r+=a[s]}return r}}function $S(e){return ew(dr(e))}const YS=e=>typeof e=="number"?0:He.test(e)?He.getAnimatableNone(e):e,GS=(e,t)=>typeof e=="number"?t!=null&&t.trim().endsWith("/")?e:0:YS(e);function QS(e){const t=dr(e);return ew(t)(t.values.map((a,r)=>GS(a,t.split[r])))}const pn={test:FS,parse:WS,createTransformer:$S,getAnimatableNone:QS};function Zu(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function KS({hue:e,saturation:t,lightness:n,alpha:a}){e/=360,t/=100,n/=100;let r=0,s=0,o=0;if(!t)r=s=o=n;else{const l=n<.5?n*(1+t):n+t-n*t,c=2*n-l;r=Zu(c,l,e+1/3),s=Zu(c,l,e),o=Zu(c,l,e-1/3)}return{red:Math.round(r*255),green:Math.round(s*255),blue:Math.round(o*255),alpha:a}}function oc(e,t){return n=>n>0?t:e}const we=(e,t,n)=>e+(t-e)*n,Ju=(e,t,n)=>{const a=e*e,r=n*(t*t-a)+a;return r<0?0:Math.sqrt(r)},XS=[Pm,ei,Wi],ZS=e=>XS.find(t=>t.test(e));function n0(e){const t=ZS(e);if(!t)return!1;let n=t.parse(e);return t===Wi&&(n=KS(n)),n}const a0=(e,t)=>{const n=n0(e),a=n0(t);if(!n||!a)return oc(e,t);const r={...n};return s=>(r.red=Ju(n.red,a.red,s),r.green=Ju(n.green,a.green,s),r.blue=Ju(n.blue,a.blue,s),r.alpha=we(n.alpha,a.alpha,s),ei.transform(r))},Mm=new Set(["none","hidden"]);function JS(e,t){return Mm.has(e)?n=>n<=0?e:t:n=>n>=1?t:e}function eI(e,t){return n=>we(e,t,n)}function Dh(e){return typeof e=="number"?eI:typeof e=="string"?jh(e)?oc:He.test(e)?a0:aI:Array.isArray(e)?tw:typeof e=="object"?He.test(e)?a0:tI:oc}function tw(e,t){const n=[...e],a=n.length,r=e.map((s,o)=>Dh(s)(s,t[o]));return s=>{for(let o=0;o<a;o++)n[o]=r[o](s);return n}}function tI(e,t){const n={...e,...t},a={};for(const r in n)e[r]!==void 0&&t[r]!==void 0&&(a[r]=Dh(e[r])(e[r],t[r]));return r=>{for(const s in a)n[s]=a[s](r);return n}}function nI(e,t){const n=[],a={color:0,var:0,number:0};for(let r=0;r<t.values.length;r++){const s=t.types[r],o=e.indexes[s][a[s]],l=e.values[o]??0;n[r]=l,a[s]++}return n}const aI=(e,t)=>{const n=pn.createTransformer(t),a=dr(e),r=dr(t);return a.indexes.var.length===r.indexes.var.length&&a.indexes.color.length===r.indexes.color.length&&a.indexes.number.length>=r.indexes.number.length?Mm.has(e)&&!r.values.length||Mm.has(t)&&!a.values.length?JS(e,t):co(tw(nI(a,r),r.values),n):oc(e,t)};function nw(e,t,n){return typeof e=="number"&&typeof t=="number"&&typeof n=="number"?we(e,t,n):Dh(e)(e,t)}const iI=e=>{const t=({timestamp:n})=>e(n);return{start:(n=!0)=>ke.update(t,n),stop:()=>Ra(t),now:()=>Ze.isProcessing?Ze.timestamp:gt.now()}},aw=(e,t,n=10)=>{let a="";const r=Math.max(Math.round(t/n),2);for(let s=0;s<r;s++)a+=Math.round(e(s/(r-1))*1e4)/1e4+", ";return`linear(${a.substring(0,a.length-2)})`},lc=2e4;function Rh(e){let t=0;const n=50;let a=e.next(t);for(;!a.done&&t<lc;)t+=n,a=e.next(t);return t>=lc?1/0:t}function rI(e,t=100,n){const a=n({...e,keyframes:[0,t]}),r=Math.min(Rh(a),lc);return{type:"keyframes",ease:s=>a.next(r*s).value/t,duration:Gt(r)}}const Re={stiffness:100,damping:10,mass:1,velocity:0,duration:800,bounce:.3,visualDuration:.3,restSpeed:{granular:.01,default:2},restDelta:{granular:.005,default:.5},minDuration:.01,maxDuration:10,minDamping:.05,maxDamping:1};function Dm(e,t){return e*Math.sqrt(1-t*t)}const sI=12;function oI(e,t,n){let a=n;for(let r=1;r<sI;r++)a=a-e(a)/t(a);return a}const ed=.001;function lI({duration:e=Re.duration,bounce:t=Re.bounce,velocity:n=Re.velocity,mass:a=Re.mass}){let r,s,o=1-t;o=Mn(Re.minDamping,Re.maxDamping,o),e=Mn(Re.minDuration,Re.maxDuration,Gt(e)),o<1?(r=u=>{const d=u*o,m=d*e,p=d-n,f=Dm(u,o),g=Math.exp(-m);return ed-p/f*g},s=u=>{const m=u*o*e,p=m*n+n,f=Math.pow(o,2)*Math.pow(u,2)*e,g=Math.exp(-m),y=Dm(Math.pow(u,2),o);return(-r(u)+ed>0?-1:1)*((p-f)*g)/y}):(r=u=>{const d=Math.exp(-u*e),m=(u-n)*e+1;return-ed+d*m},s=u=>{const d=Math.exp(-u*e),m=(n-u)*(e*e);return d*m});const l=5/e,c=oI(r,s,l);if(e=_t(e),isNaN(c))return{stiffness:Re.stiffness,damping:Re.damping,duration:e};{const u=Math.pow(c,2)*a;return{stiffness:u,damping:o*2*Math.sqrt(a*u),duration:e}}}const cI=["duration","bounce"],uI=["stiffness","damping","mass"];function i0(e,t){return t.some(n=>e[n]!==void 0)}function dI(e){let t={velocity:Re.velocity,stiffness:Re.stiffness,damping:Re.damping,mass:Re.mass,isResolvedFromDuration:!1,...e};if(!i0(e,uI)&&i0(e,cI))if(t.velocity=0,e.visualDuration){const n=e.visualDuration,a=2*Math.PI/(n*1.2),r=a*a,s=2*Mn(.05,1,1-(e.bounce||0))*Math.sqrt(r);t={...t,mass:Re.mass,stiffness:r,damping:s}}else{const n=lI({...e,velocity:0});t={...t,...n,mass:Re.mass},t.isResolvedFromDuration=!0}return t}function cc(e=Re.visualDuration,t=Re.bounce){const n=typeof e!="object"?{visualDuration:e,keyframes:[0,1],bounce:t}:e;let{restSpeed:a,restDelta:r}=n;const s=n.keyframes[0],o=n.keyframes[n.keyframes.length-1],l={done:!1,value:s},{stiffness:c,damping:u,mass:d,duration:m,velocity:p,isResolvedFromDuration:f}=dI({...n,velocity:-Gt(n.velocity||0)}),g=p||0,y=u/(2*Math.sqrt(c*d)),w=o-s,x=Gt(Math.sqrt(c/d)),b=Math.abs(w)<5;a||(a=b?Re.restSpeed.granular:Re.restSpeed.default),r||(r=b?Re.restDelta.granular:Re.restDelta.default);let v,N,I,C,R,O;if(y<1)I=Dm(x,y),C=(g+y*x*w)/I,v=P=>{const Y=Math.exp(-y*x*P);return o-Y*(C*Math.sin(I*P)+w*Math.cos(I*P))},R=y*x*C+w*I,O=y*x*w-C*I,N=P=>Math.exp(-y*x*P)*(R*Math.sin(I*P)+O*Math.cos(I*P));else if(y===1){v=Y=>o-Math.exp(-x*Y)*(w+(g+x*w)*Y);const P=g+x*w;N=Y=>Math.exp(-x*Y)*(x*P*Y-g)}else{const P=x*Math.sqrt(y*y-1);v=B=>{const D=Math.exp(-y*x*B),q=Math.min(P*B,300);return o-D*((g+y*x*w)*Math.sinh(q)+P*w*Math.cosh(q))/P};const Y=(g+y*x*w)/P,K=y*x*Y-w*P,ie=y*x*w-Y*P;N=B=>{const D=Math.exp(-y*x*B),q=Math.min(P*B,300);return D*(K*Math.sinh(q)+ie*Math.cosh(q))}}const H={calculatedDuration:f&&m||null,velocity:P=>_t(N(P)),next:P=>{if(!f&&y<1){const K=Math.exp(-y*x*P),ie=Math.sin(I*P),B=Math.cos(I*P),D=o-K*(C*ie+w*B),q=_t(K*(R*ie+O*B));return l.done=Math.abs(q)<=a&&Math.abs(o-D)<=r,l.value=l.done?o:D,l}const Y=v(P);if(f)l.done=P>=m;else{const K=_t(N(P));l.done=Math.abs(K)<=a&&Math.abs(o-Y)<=r}return l.value=l.done?o:Y,l},toString:()=>{const P=Math.min(Rh(H),lc),Y=aw(K=>H.next(P*K).value,P,30);return P+"ms "+Y},toTransition:()=>{}};return H}cc.applyToOptions=e=>{const t=rI(e,100,cc);return e.ease=t.ease,e.duration=_t(t.duration),e.type="keyframes",e};const mI=5;function iw(e,t,n){const a=Math.max(t-mI,0);return L1(n-e(a),t-a)}function Rm({keyframes:e,velocity:t=0,power:n=.8,timeConstant:a=325,bounceDamping:r=10,bounceStiffness:s=500,modifyTarget:o,min:l,max:c,restDelta:u=.5,restSpeed:d}){const m=e[0],p={done:!1,value:m},f=O=>l!==void 0&&O<l||c!==void 0&&O>c,g=O=>l===void 0?c:c===void 0||Math.abs(l-O)<Math.abs(c-O)?l:c;let y=n*t;const w=m+y,x=o===void 0?w:o(w);x!==w&&(y=x-m);const b=O=>-y*Math.exp(-O/a),v=O=>x+b(O),N=O=>{const H=b(O),P=v(O);p.done=Math.abs(H)<=u,p.value=p.done?x:P};let I,C;const R=O=>{f(p.value)&&(I=O,C=cc({keyframes:[p.value,g(p.value)],velocity:iw(v,O,p.value),damping:r,stiffness:s,restDelta:u,restSpeed:d}))};return R(0),{calculatedDuration:null,next:O=>{let H=!1;return!C&&I===void 0&&(H=!0,N(O),R(O)),I!==void 0&&O>=I?C.next(O-I):(!H&&N(O),p)}}}function pI(e,t,n){const a=[],r=n||Da.mix||nw,s=e.length-1;for(let o=0;o<s;o++){let l=r(e[o],e[o+1]);if(t){const c=Array.isArray(t)?t[o]||Kt:t;l=co(c,l)}a.push(l)}return a}function hI(e,t,{clamp:n=!0,ease:a,mixer:r}={}){const s=e.length;if(tu(s===t.length),s===1)return()=>t[0];if(s===2&&t[0]===t[1])return()=>t[1];const o=e[0]===e[1];e[0]>e[s-1]&&(e=[...e].reverse(),t=[...t].reverse());const l=pI(t,a,r),c=l.length,u=d=>{if(o&&d<e[0])return t[0];let m=0;if(c>1)for(;m<e.length-2&&!(d<e[m+1]);m++);const p=$s(e[m],e[m+1],d);return l[m](p)};return n?d=>u(Mn(e[0],e[s-1],d)):u}function fI(e,t){const n=e[e.length-1];for(let a=1;a<=t;a++){const r=$s(0,t,a);e.push(we(n,1,r))}}function gI(e){const t=[0];return fI(t,e.length-1),t}function xI(e,t){return e.map(n=>n*t)}function yI(e,t){return e.map(()=>t||$1).splice(0,e.length-1)}function hs({duration:e=300,keyframes:t,times:n,ease:a="easeInOut"}){const r=NS(a)?a.map(Zg):Zg(a),s={done:!1,value:t[0]},o=xI(n&&n.length===t.length?n:gI(t),e),l=hI(o,t,{ease:Array.isArray(r)?r:yI(t,r)});return{calculatedDuration:e,next:c=>(s.value=l(c),s.done=c>=e,s)}}const bI=e=>e!==null;function nu(e,{repeat:t,repeatType:n="loop"},a,r=1){const s=e.filter(bI),l=r<0||t&&n!=="loop"&&t%2===1?0:s.length-1;return!l||a===void 0?s[l]:a}const vI={decay:Rm,inertia:Rm,tween:hs,keyframes:hs,spring:cc};function rw(e){typeof e.type=="string"&&(e.type=vI[e.type])}class Oh{constructor(){this.updateFinished()}get finished(){return this._finished}updateFinished(){this._finished=new Promise(t=>{this.resolve=t})}notifyFinished(){this.resolve()}then(t,n){return this.finished.then(t,n)}}const wI=e=>e/100;class uc extends Oh{constructor(t){super(),this.state="idle",this.startTime=null,this.isStopped=!1,this.currentTime=0,this.holdTime=null,this.playbackSpeed=1,this.delayState={done:!1,value:void 0},this.stop=()=>{var a,r;const{motionValue:n}=this.options;n&&n.updatedAt!==gt.now()&&this.tick(gt.now()),this.isStopped=!0,this.state!=="idle"&&(this.teardown(),(r=(a=this.options).onStop)==null||r.call(a))},this.options=t,this.initAnimation(),this.play(),t.autoplay===!1&&this.pause()}initAnimation(){const{options:t}=this;rw(t);const{type:n=hs,repeat:a=0,repeatDelay:r=0,repeatType:s,velocity:o=0}=t;let{keyframes:l}=t;const c=n||hs;c!==hs&&typeof l[0]!="number"&&(this.mixKeyframes=co(wI,nw(l[0],l[1])),l=[0,100]);const u=c({...t,keyframes:l});s==="mirror"&&(this.mirroredGenerator=c({...t,keyframes:[...l].reverse(),velocity:-o})),u.calculatedDuration===null&&(u.calculatedDuration=Rh(u));const{calculatedDuration:d}=u;this.calculatedDuration=d,this.resolvedDuration=d+r,this.totalDuration=this.resolvedDuration*(a+1)-r,this.generator=u}updateTime(t){const n=Math.round(t-this.startTime)*this.playbackSpeed;this.holdTime!==null?this.currentTime=this.holdTime:this.currentTime=n}tick(t,n=!1){const{generator:a,totalDuration:r,mixKeyframes:s,mirroredGenerator:o,resolvedDuration:l,calculatedDuration:c}=this;if(this.startTime===null)return a.next(0);const{delay:u=0,keyframes:d,repeat:m,repeatType:p,repeatDelay:f,type:g,onUpdate:y,finalKeyframe:w}=this.options;this.speed>0?this.startTime=Math.min(this.startTime,t):this.speed<0&&(this.startTime=Math.min(t-r/this.speed,this.startTime)),n?this.currentTime=t:this.updateTime(t);const x=this.currentTime-u*(this.playbackSpeed>=0?1:-1),b=this.playbackSpeed>=0?x<0:x>r;this.currentTime=Math.max(x,0),this.state==="finished"&&this.holdTime===null&&(this.currentTime=r);let v=this.currentTime,N=a;if(m){const O=Math.min(this.currentTime,r)/l;let H=Math.floor(O),P=O%1;!P&&O>=1&&(P=1),P===1&&H--,H=Math.min(H,m+1),!!(H%2)&&(p==="reverse"?(P=1-P,f&&(P-=f/l)):p==="mirror"&&(N=o)),v=Mn(0,1,P)*l}let I;b?(this.delayState.value=d[0],I=this.delayState):I=N.next(v),s&&!b&&(I.value=s(I.value));let{done:C}=I;!b&&c!==null&&(C=this.playbackSpeed>=0?this.currentTime>=r:this.currentTime<=0);const R=this.holdTime===null&&(this.state==="finished"||this.state==="running"&&C);return R&&g!==Rm&&(I.value=nu(d,this.options,w,this.speed)),y&&y(I.value),R&&this.finish(),I}then(t,n){return this.finished.then(t,n)}get duration(){return Gt(this.calculatedDuration)}get iterationDuration(){const{delay:t=0}=this.options||{};return this.duration+Gt(t)}get time(){return Gt(this.currentTime)}set time(t){t=_t(t),this.currentTime=t,this.startTime===null||this.holdTime!==null||this.playbackSpeed===0?this.holdTime=t:this.driver&&(this.startTime=this.driver.now()-t/this.playbackSpeed),this.driver?this.driver.start(!1):(this.startTime=0,this.state="paused",this.holdTime=t,this.tick(t))}getGeneratorVelocity(){const t=this.currentTime;if(t<=0)return this.options.velocity||0;if(this.generator.velocity)return this.generator.velocity(t);const n=this.generator.next(t).value;return iw(a=>this.generator.next(a).value,t,n)}get speed(){return this.playbackSpeed}set speed(t){const n=this.playbackSpeed!==t;n&&this.driver&&this.updateTime(gt.now()),this.playbackSpeed=t,n&&this.driver&&(this.time=Gt(this.currentTime))}play(){var r,s;if(this.isStopped)return;const{driver:t=iI,startTime:n}=this.options;this.driver||(this.driver=t(o=>this.tick(o))),(s=(r=this.options).onPlay)==null||s.call(r);const a=this.driver.now();this.state==="finished"?(this.updateFinished(),this.startTime=a):this.holdTime!==null?this.startTime=a-this.holdTime:this.startTime||(this.startTime=n??a),this.state==="finished"&&this.speed<0&&(this.startTime+=this.calculatedDuration),this.holdTime=null,this.state="running",this.driver.start()}pause(){this.state="paused",this.updateTime(gt.now()),this.holdTime=this.currentTime}complete(){this.state!=="running"&&this.play(),this.state="finished",this.holdTime=null}finish(){var t,n;this.notifyFinished(),this.teardown(),this.state="finished",(n=(t=this.options).onComplete)==null||n.call(t)}cancel(){var t,n;this.holdTime=null,this.startTime=0,this.tick(0),this.teardown(),(n=(t=this.options).onCancel)==null||n.call(t)}teardown(){this.state="idle",this.stopDriver(),this.startTime=this.holdTime=null}stopDriver(){this.driver&&(this.driver.stop(),this.driver=void 0)}sample(t){return this.startTime=0,this.tick(t,!0)}attachTimeline(t){var n;return this.options.allowFlatten&&(this.options.type="keyframes",this.options.ease="linear",this.initAnimation()),(n=this.driver)==null||n.stop(),t.observe(this)}}function kI(e){for(let t=1;t<e.length;t++)e[t]??(e[t]=e[t-1])}const ti=e=>e*180/Math.PI,Om=e=>{const t=ti(Math.atan2(e[1],e[0]));return _m(t)},AI={x:4,y:5,translateX:4,translateY:5,scaleX:0,scaleY:3,scale:e=>(Math.abs(e[0])+Math.abs(e[3]))/2,rotate:Om,rotateZ:Om,skewX:e=>ti(Math.atan(e[1])),skewY:e=>ti(Math.atan(e[2])),skew:e=>(Math.abs(e[1])+Math.abs(e[2]))/2},_m=e=>(e=e%360,e<0&&(e+=360),e),r0=Om,s0=e=>Math.sqrt(e[0]*e[0]+e[1]*e[1]),o0=e=>Math.sqrt(e[4]*e[4]+e[5]*e[5]),CI={x:12,y:13,z:14,translateX:12,translateY:13,translateZ:14,scaleX:s0,scaleY:o0,scale:e=>(s0(e)+o0(e))/2,rotateX:e=>_m(ti(Math.atan2(e[6],e[5]))),rotateY:e=>_m(ti(Math.atan2(-e[2],e[0]))),rotateZ:r0,rotate:r0,skewX:e=>ti(Math.atan(e[4])),skewY:e=>ti(Math.atan(e[1])),skew:e=>(Math.abs(e[1])+Math.abs(e[4]))/2};function Lm(e){return e.includes("scale")?1:0}function zm(e,t){if(!e||e==="none")return Lm(t);const n=e.match(/^matrix3d\(([-\d.e\s,]+)\)$/u);let a,r;if(n)a=CI,r=n;else{const l=e.match(/^matrix\(([-\d.e\s,]+)\)$/u);a=AI,r=l}if(!r)return Lm(t);const s=a[t],o=r[1].split(",").map(NI);return typeof s=="function"?s(o):o[s]}const EI=(e,t)=>{const{transform:n="none"}=getComputedStyle(e);return zm(n,t)};function NI(e){return parseFloat(e.trim())}const Ar=["transformPerspective","x","y","z","translateX","translateY","translateZ","scale","scaleX","scaleY","rotate","rotateX","rotateY","rotateZ","skew","skewX","skewY"],Cr=new Set([...Ar,"pathRotation"]),l0=e=>e===kr||e===ee,TI=new Set(["x","y","z"]),SI=Ar.filter(e=>!TI.has(e));function II(e){const t=[];return SI.forEach(n=>{const a=e.getValue(n);a!==void 0&&(t.push([n,a.get()]),a.set(n.startsWith("scale")?1:0))}),t}const ya={width:({x:e},{paddingLeft:t="0",paddingRight:n="0",boxSizing:a})=>{const r=e.max-e.min;return a==="border-box"?r:r-parseFloat(t)-parseFloat(n)},height:({y:e},{paddingTop:t="0",paddingBottom:n="0",boxSizing:a})=>{const r=e.max-e.min;return a==="border-box"?r:r-parseFloat(t)-parseFloat(n)},top:(e,{top:t})=>parseFloat(t),left:(e,{left:t})=>parseFloat(t),bottom:({y:e},{top:t})=>parseFloat(t)+(e.max-e.min),right:({x:e},{left:t})=>parseFloat(t)+(e.max-e.min),x:(e,{transform:t})=>zm(t,"x"),y:(e,{transform:t})=>zm(t,"y")};ya.translateX=ya.x;ya.translateY=ya.y;const si=new Set;let qm=!1,Bm=!1,Fm=!1;function sw(){if(Bm){const e=Array.from(si).filter(a=>a.needsMeasurement),t=new Set(e.map(a=>a.element)),n=new Map;t.forEach(a=>{const r=II(a);r.length&&(n.set(a,r),a.render())}),e.forEach(a=>a.measureInitialState()),t.forEach(a=>{a.render();const r=n.get(a);r&&r.forEach(([s,o])=>{var l;(l=a.getValue(s))==null||l.set(o)})}),e.forEach(a=>a.measureEndState()),e.forEach(a=>{a.suspendedScrollY!==void 0&&window.scrollTo(0,a.suspendedScrollY)})}Bm=!1,qm=!1,si.forEach(e=>e.complete(Fm)),si.clear()}function ow(){si.forEach(e=>{e.readKeyframes(),e.needsMeasurement&&(Bm=!0)})}function jI(){Fm=!0,ow(),sw(),Fm=!1}class _h{constructor(t,n,a,r,s,o=!1){this.state="pending",this.isAsync=!1,this.needsMeasurement=!1,this.unresolvedKeyframes=[...t],this.onComplete=n,this.name=a,this.motionValue=r,this.element=s,this.isAsync=o}scheduleResolve(){this.state="scheduled",this.isAsync?(si.add(this),qm||(qm=!0,ke.read(ow),ke.resolveKeyframes(sw))):(this.readKeyframes(),this.complete())}readKeyframes(){const{unresolvedKeyframes:t,name:n,element:a,motionValue:r}=this;if(t[0]===null){const s=r==null?void 0:r.get(),o=t[t.length-1];if(s!==void 0)t[0]=s;else if(a&&n){const l=a.readValue(n,o);l!=null&&(t[0]=l)}t[0]===void 0&&(t[0]=o),r&&s===void 0&&r.set(t[0])}kI(t)}setFinalKeyframe(){}measureInitialState(){}renderEndStyles(){}measureEndState(){}complete(t=!1){this.state="complete",this.onComplete(this.unresolvedKeyframes,this.finalKeyframe,t),si.delete(this)}cancel(){this.state==="scheduled"&&(si.delete(this),this.state="pending")}resume(){this.state==="pending"&&this.scheduleResolve()}}const PI=e=>e.startsWith("--");function lw(e,t,n){PI(t)?e.style.setProperty(t,n):e.style[t]=n}const MI={};function cw(e,t){const n=_1(e);return()=>MI[t]??n()}const DI=cw(()=>window.ScrollTimeline!==void 0,"scrollTimeline"),uw=cw(()=>{try{document.createElement("div").animate({opacity:0},{easing:"linear(0, 1)"})}catch{return!1}return!0},"linearEasing"),ts=([e,t,n,a])=>`cubic-bezier(${e}, ${t}, ${n}, ${a})`,c0={linear:"linear",ease:"ease",easeIn:"ease-in",easeOut:"ease-out",easeInOut:"ease-in-out",circIn:ts([0,.65,.55,1]),circOut:ts([.55,0,1,.45]),backIn:ts([.31,.01,.66,-.59]),backOut:ts([.33,1.53,.69,.99])};function dw(e,t){if(e)return typeof e=="function"?uw()?aw(e,t):"ease-out":Y1(e)?ts(e):Array.isArray(e)?e.map(n=>dw(n,t)||c0.easeOut):c0[e]}function RI(e,t,n,{delay:a=0,duration:r=300,repeat:s=0,repeatType:o="loop",ease:l="easeOut",times:c}={},u=void 0){const d={[t]:n};c&&(d.offset=c);const m=dw(l,r);Array.isArray(m)&&(d.easing=m);const p={delay:a,duration:r,easing:Array.isArray(m)?"linear":m,fill:"both",iterations:s+1,direction:o==="reverse"?"alternate":"normal"};return u&&(p.pseudoElement=u),e.animate(d,p)}function mw(e){return typeof e=="function"&&"applyToOptions"in e}function OI({type:e,...t}){return mw(e)&&uw()?e.applyToOptions(t):(t.duration??(t.duration=300),t.ease??(t.ease="easeOut"),t)}class pw extends Oh{constructor(t){if(super(),this.finishedTime=null,this.isStopped=!1,this.manualStartTime=null,!t)return;const{element:n,name:a,keyframes:r,pseudoElement:s,allowFlatten:o=!1,finalKeyframe:l,onComplete:c}=t;this.isPseudoElement=!!s,this.allowFlatten=o,this.options=t,tu(typeof t.type!="string");const u=OI(t);this.animation=RI(n,a,r,u,s),u.autoplay===!1&&this.animation.pause(),this.animation.onfinish=()=>{if(this.finishedTime=this.time,!s){const d=nu(r,this.options,l,this.speed);this.updateMotionValue&&this.updateMotionValue(d),lw(n,a,d),this.animation.cancel()}c==null||c(),this.notifyFinished()}}play(){this.isStopped||(this.manualStartTime=null,this.animation.play(),this.state==="finished"&&this.updateFinished())}pause(){this.animation.pause()}complete(){var t,n;(n=(t=this.animation).finish)==null||n.call(t)}cancel(){try{this.animation.cancel()}catch{}}stop(){if(this.isStopped)return;this.isStopped=!0;const{state:t}=this;t==="idle"||t==="finished"||(this.updateMotionValue?this.updateMotionValue():this.commitStyles(),this.isPseudoElement||this.cancel())}commitStyles(){var n,a,r;const t=(n=this.options)==null?void 0:n.element;!this.isPseudoElement&&(t!=null&&t.isConnected)&&((r=(a=this.animation).commitStyles)==null||r.call(a))}get duration(){var n,a;const t=((a=(n=this.animation.effect)==null?void 0:n.getComputedTiming)==null?void 0:a.call(n).duration)||0;return Gt(Number(t))}get iterationDuration(){const{delay:t=0}=this.options||{};return this.duration+Gt(t)}get time(){return Gt(Number(this.animation.currentTime)||0)}set time(t){const n=this.finishedTime!==null;this.manualStartTime=null,this.finishedTime=null,this.animation.currentTime=_t(t),n&&this.animation.pause()}get speed(){return this.animation.playbackRate}set speed(t){t<0&&(this.finishedTime=null),this.animation.playbackRate=t}get state(){return this.finishedTime!==null?"finished":this.animation.playState}get startTime(){return this.manualStartTime??Number(this.animation.startTime)}set startTime(t){this.manualStartTime=this.animation.startTime=t}attachTimeline({timeline:t,rangeStart:n,rangeEnd:a,observe:r}){var s;return this.allowFlatten&&((s=this.animation.effect)==null||s.updateTiming({easing:"linear"})),this.animation.onfinish=null,t&&DI()?(this.animation.timeline=t,n&&(this.animation.rangeStart=n),a&&(this.animation.rangeEnd=a),Kt):r(this)}}const hw={anticipate:U1,backInOut:H1,circInOut:W1};function _I(e){return e in hw}function LI(e){typeof e.ease=="string"&&_I(e.ease)&&(e.ease=hw[e.ease])}const td=10;class zI extends pw{constructor(t){LI(t),rw(t),super(t),t.startTime!==void 0&&t.autoplay!==!1&&(this.startTime=t.startTime),this.options=t}updateMotionValue(t){const{motionValue:n,onUpdate:a,onComplete:r,element:s,...o}=this.options;if(!n)return;if(t!==void 0){n.set(t);return}const l=new uc({...o,autoplay:!1}),c=Math.max(td,gt.now()-this.startTime),u=Mn(0,td,c-td),d=l.sample(c).value,{name:m}=this.options;s&&m&&lw(s,m,d),n.setWithVelocity(l.sample(Math.max(0,c-u)).value,d,u),l.stop()}}const u0=(e,t)=>t==="zIndex"?!1:!!(typeof e=="number"||Array.isArray(e)||typeof e=="string"&&(pn.test(e)||e==="0")&&!e.startsWith("url("));function qI(e){const t=e[0];if(e.length===1)return!0;for(let n=0;n<e.length;n++)if(e[n]!==t)return!0}function BI(e,t,n,a){const r=e[0];if(r===null)return!1;if(t==="display"||t==="visibility")return!0;const s=e[e.length-1],o=u0(r,t),l=u0(s,t);return!o||!l?!1:qI(e)||(n==="spring"||mw(n))&&a}function Hm(e){e.duration=0,e.type="keyframes"}const fw=new Set(["opacity","clipPath","filter","transform","backgroundColor"]),FI=/^(?:oklch|oklab|lab|lch|color|color-mix|light-dark)\(/;function HI(e){for(let t=0;t<e.length;
492t++)if(typeof e[t]=="string"&&FI.test(e[t]))return!0;return!1}const UI=new Set(["color","backgroundColor","outlineColor","fill","stroke","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor"]),VI=_1(()=>Object.hasOwnProperty.call(Element.prototype,"animate"));function WI(e){var m;const{motionValue:t,name:n,repeatDelay:a,repeatType:r,damping:s,type:o,keyframes:l}=e,c=(m=t==null?void 0:t.owner)==null?void 0:m.current;if(!(c instanceof HTMLElement)&&!(c instanceof SVGElement))return!1;const{onUpdate:u,transformTemplate:d}=t.owner.getProps();return VI()&&n&&(fw.has(n)||UI.has(n)&&HI(l))&&(n!=="transform"||!d)&&!u&&!a&&r!=="mirror"&&s!==0&&o!=="inertia"}const $I=40;class YI extends Oh{constructor({autoplay:t=!0,delay:n=0,type:a="keyframes",repeat:r=0,repeatDelay:s=0,repeatType:o="loop",keyframes:l,name:c,motionValue:u,element:d,...m}){var g;super(),this.stop=()=>{var y,w;this._animation&&(this._animation.stop(),(y=this.stopTimeline)==null||y.call(this)),(w=this.keyframeResolver)==null||w.cancel()},this.createdAt=gt.now();const p={autoplay:t,delay:n,type:a,repeat:r,repeatDelay:s,repeatType:o,name:c,motionValue:u,element:d,...m},f=(d==null?void 0:d.KeyframeResolver)||_h;this.keyframeResolver=new f(l,(y,w,x)=>this.onKeyframesResolved(y,w,p,!x),c,u,d),(g=this.keyframeResolver)==null||g.scheduleResolve()}onKeyframesResolved(t,n,a,r){var x,b;this.keyframeResolver=void 0;const{name:s,type:o,velocity:l,delay:c,isHandoff:u,onUpdate:d}=a;this.resolvedAt=gt.now();let m=!0;BI(t,s,o,l)||(m=!1,(Da.instantAnimations||!c)&&(d==null||d(nu(t,a,n))),t[0]=t[t.length-1],Hm(a),a.repeat=0);const f={startTime:r?this.resolvedAt?this.resolvedAt-this.createdAt>$I?this.resolvedAt:this.createdAt:this.createdAt:void 0,finalKeyframe:n,...a,keyframes:t},g=m&&!u&&WI(f),y=(b=(x=f.motionValue)==null?void 0:x.owner)==null?void 0:b.current;let w;if(g)try{w=new zI({...f,element:y})}catch{w=new uc(f)}else w=new uc(f);w.finished.then(()=>{this.notifyFinished()}).catch(Kt),this.pendingTimeline&&(this.stopTimeline=w.attachTimeline(this.pendingTimeline),this.pendingTimeline=void 0),this._animation=w}get finished(){return this._animation?this.animation.finished:this._finished}then(t,n){return this.finished.finally(t).then(()=>{})}get animation(){var t;return this._animation||((t=this.keyframeResolver)==null||t.resume(),jI()),this._animation}get duration(){return this.animation.duration}get iterationDuration(){return this.animation.iterationDuration}get time(){return this.animation.time}set time(t){this.animation.time=t}get speed(){return this.animation.speed}get state(){return this.animation.state}set speed(t){this.animation.speed=t}get startTime(){return this.animation.startTime}attachTimeline(t){return this._animation?this.stopTimeline=this.animation.attachTimeline(t):this.pendingTimeline=t,()=>this.stop()}play(){this.animation.play()}pause(){this.animation.pause()}complete(){this.animation.complete()}cancel(){var t;this._animation&&this.animation.cancel(),(t=this.keyframeResolver)==null||t.cancel()}}function gw(e,t,n,a=0,r=1){const s=Array.from(e).sort((u,d)=>u.sortNodePosition(d)).indexOf(t),o=e.size,l=(o-1)*a;return typeof n=="function"?n(s,o):r===1?s*a:l-s*a}const d0=30,GI=e=>!isNaN(parseFloat(e));class QI{constructor(t,n={}){this.canTrackVelocity=null,this.events={},this.updateAndNotify=a=>{var s;const r=gt.now();if(this.updatedAt!==r&&this.setPrevFrameValue(),this.prev=this.current,this.setCurrent(a),this.current!==this.prev&&((s=this.events.change)==null||s.notify(this.current),this.dependents))for(const o of this.dependents)o.dirty()},this.hasAnimated=!1,this.setCurrent(t),this.owner=n.owner}setCurrent(t){this.current=t,this.updatedAt=gt.now(),this.canTrackVelocity===null&&t!==void 0&&(this.canTrackVelocity=GI(this.current))}setPrevFrameValue(t=this.current){this.prevFrameValue=t,this.prevUpdatedAt=this.updatedAt}onChange(t){return this.on("change",t)}on(t,n){this.events[t]||(this.events[t]=new Th);const a=this.events[t].add(n);return t==="change"?()=>{a(),ke.read(()=>{this.events.change.getSize()||this.stop()})}:a}clearListeners(){for(const t in this.events)this.events[t].clear()}attach(t,n){this.passiveEffect=t,this.stopPassiveEffect=n}set(t){this.passiveEffect?this.passiveEffect(t,this.updateAndNotify):this.updateAndNotify(t)}setWithVelocity(t,n,a){this.set(n),this.prev=void 0,this.prevFrameValue=t,this.prevUpdatedAt=this.updatedAt-a}jump(t,n=!0){this.updateAndNotify(t),this.prev=t,this.prevUpdatedAt=this.prevFrameValue=void 0,n&&this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}dirty(){var t;(t=this.events.change)==null||t.notify(this.current)}addDependent(t){this.dependents||(this.dependents=new Set),this.dependents.add(t)}removeDependent(t){this.dependents&&this.dependents.delete(t)}get(){return this.current}getPrevious(){return this.prev}getVelocity(){const t=gt.now();if(!this.canTrackVelocity||this.prevFrameValue===void 0||t-this.updatedAt>d0)return 0;const n=Math.min(this.updatedAt-this.prevUpdatedAt,d0);return L1(parseFloat(this.current)-parseFloat(this.prevFrameValue),n)}start(t){return this.stop(),new Promise(n=>{this.hasAnimated=!0,this.animation=t(n),this.events.animationStart&&this.events.animationStart.notify()}).then(()=>{this.events.animationComplete&&this.events.animationComplete.notify(),this.clearAnimation()})}stop(){this.animation&&(this.animation.stop(),this.events.animationCancel&&this.events.animationCancel.notify()),this.clearAnimation()}isAnimating(){return!!this.animation}clearAnimation(){delete this.animation}destroy(){var t,n;(t=this.dependents)==null||t.clear(),(n=this.events.destroy)==null||n.notify(),this.clearListeners(),this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}}function mr(e,t){return new QI(e,t)}function xw(e,t){if(e!=null&&e.inherit&&t){const{inherit:n,...a}=e;return{...t,...a}}return e}function Lh(e,t){const n=(e==null?void 0:e[t])??(e==null?void 0:e.default)??e;return n!==e?xw(n,e):n}const KI={type:"spring",stiffness:500,damping:25,restSpeed:10},XI=e=>({type:"spring",stiffness:550,damping:e===0?2*Math.sqrt(550):30,restSpeed:10}),ZI={type:"keyframes",duration:.8},JI={type:"keyframes",ease:[.25,.1,.35,1],duration:.3},e4=(e,{keyframes:t})=>t.length>2?ZI:Cr.has(e)?e.startsWith("scale")?XI(t[1]):KI:JI,t4=new Set(["when","delay","delayChildren","staggerChildren","staggerDirection","repeat","repeatType","repeatDelay","from","elapsed"]);function n4(e){for(const t in e)if(!t4.has(t))return!0;return!1}const zh=(e,t,n,a={},r,s)=>o=>{const l=Lh(a,e)||{},c=l.delay||a.delay||0;let{elapsed:u=0}=a;u=u-_t(c);const d={keyframes:Array.isArray(n)?n:[null,n],ease:"easeOut",velocity:t.getVelocity(),...l,delay:-u,onUpdate:p=>{t.set(p),l.onUpdate&&l.onUpdate(p)},onComplete:()=>{o(),l.onComplete&&l.onComplete()},name:e,motionValue:t,element:s?void 0:r};n4(l)||Object.assign(d,e4(e,d)),d.duration&&(d.duration=_t(d.duration)),d.repeatDelay&&(d.repeatDelay=_t(d.repeatDelay)),d.from!==void 0&&(d.keyframes[0]=d.from);let m=!1;if((d.type===!1||d.duration===0&&!d.repeatDelay)&&(Hm(d),d.delay===0&&(m=!0)),(Da.instantAnimations||Da.skipAnimations||r!=null&&r.shouldSkipAnimations||l.skipAnimations)&&(m=!0,Hm(d),d.delay=0),d.allowFlatten=!l.type&&!l.ease,m&&!s&&t.get()!==void 0){const p=nu(d.keyframes,l);if(p!==void 0){ke.update(()=>{d.onUpdate(p),d.onComplete()});return}}return l.isSync?new uc(d):new YI(d)},a4=/^var\(--(?:([\w-]+)|([\w-]+), ?([a-zA-Z\d ()%#.,-]+))\)/u;function i4(e){const t=a4.exec(e);if(!t)return[,];const[,n,a,r]=t;return[`--${n??a}`,r]}function yw(e,t,n=1){const[a,r]=i4(e);
vendor: 5,811 bytes, line 492
492if(!a)return;const s=window.getComputedStyle(t).getPropertyValue(a);if(s){const o=s.trim();return D1(o)?parseFloat(o):o}return jh(r)?yw(r,t,n+1):r}function m0(e){const t=[{},{}];return e==null||e.values.forEach((n,a)=>{t[0][a]=n.get(),t[1][a]=n.getVelocity()}),t}function qh(e,t,n,a){if(typeof t=="function"){const[r,s]=m0(a);t=t(n!==void 0?n:e.custom,r,s)}if(typeof t=="string"&&(t=e.variants&&e.variants[t]),typeof t=="function"){const[r,s]=m0(a);t=t(n!==void 0?n:e.custom,r,s)}return t}function oi(e,t,n){const a=e.getProps();return qh(a,t,n!==void 0?n:a.custom,e)}const bw=new Set(["width","height","top","left","right","bottom",...Ar]),Um=e=>Array.isArray(e);function r4(e,t,n){e.hasValue(t)?e.getValue(t).set(n):e.addValue(t,mr(n))}function s4(e){return Um(e)?e[e.length-1]||0:e}function o4(e,t){const n=oi(e,t);let{transitionEnd:a={},transition:r={},...s}=n||{};s={...s,...a};for(const o in s){const l=s4(s[o]);r4(e,o,l)}}const Je=e=>!!(e&&e.getVelocity);function l4(e){return!!(Je(e)&&e.add)}function Vm(e,t){const n=e.getValue("willChange");if(l4(n))return n.add(t);if(!n&&Da.WillChange){const a=new Da.WillChange("auto");e.addValue("willChange",a),a.add(t)}}function Bh(e){return e.replace(/([A-Z])/g,t=>`-${t.toLowerCase()}`)}const c4="framerAppearId",vw="data-"+Bh(c4);function ww(e){return e.props[vw]}function u4({protectedKeys:e,needsAnimating:t},n){const a=e.hasOwnProperty(n)&&t[n]!==!0;return t[n]=!1,a}function kw(e,t,{delay:n=0,transitionOverride:a,type:r}={}){let{transition:s,transitionEnd:o,...l}=t;const c=e.getDefaultTransition();s=s?xw(s,c):c;const u=s==null?void 0:s.reduceMotion,d=s==null?void 0:s.skipAnimations;a&&(s=a);const m=[],p=r&&e.animationState&&e.animationState.getState()[r],f=s==null?void 0:s.path;f&&f.animateVisualElement(e,l,s,n,m);for(const g in l){const y=e.getValue(g,e.latestValues[g]??null),w=l[g];if(w===void 0||p&&u4(p,g))continue;const x={delay:n,...Lh(s||{},g)};d&&(x.skipAnimations=!0);const b=y.get();if(b!==void 0&&!y.isAnimating()&&!Array.isArray(w)&&w===b&&!x.velocity){ke.update(()=>y.set(w));continue}let v=!1;if(window.MotionHandoffAnimation){const C=ww(e);if(C){const R=window.MotionHandoffAnimation(C,g,ke);R!==null&&(x.startTime=R,v=!0)}}Vm(e,g);const N=u??e.shouldReduceMotion;y.start(zh(g,y,w,N&&bw.has(g)?{type:!1}:x,e,v));const I=y.animation;I&&m.push(I)}if(o){const g=()=>ke.update(()=>{o&&o4(e,o)});m.length?Promise.all(m).then(g):g()}return m}function Wm(e,t,n={}){var c;const a=oi(e,t,n.type==="exit"?(c=e.presenceContext)==null?void 0:c.custom:void 0);let{transition:r=e.getDefaultTransition()||{}}=a||{};n.transitionOverride&&(r=n.transitionOverride);const s=a?()=>Promise.all(kw(e,a,n)):()=>Promise.resolve(),o=e.variantChildren&&e.variantChildren.size?(u=0)=>{const{delayChildren:d=0,staggerChildren:m,staggerDirection:p}=r;return d4(e,t,u,d,m,p,n)}:()=>Promise.resolve(),{when:l}=r;if(l){const[u,d]=l==="beforeChildren"?[s,o]:[o,s];return u().then(()=>d())}else return Promise.all([s(),o(n.delay)])}function d4(e,t,n=0,a=0,r=0,s=1,o){const l=[];for(const c of e.variantChildren)c.notify("AnimationStart",t),l.push(Wm(c,t,{...o,delay:n+(typeof a=="function"?0:a)+gw(e.variantChildren,c,a,r,s)}).then(()=>c.notify("AnimationComplete",t)));return Promise.all(l)}function m4(e,t,n={}){e.notify("AnimationStart",t);let a;if(Array.isArray(t)){const r=t.map(s=>Wm(e,s,n));a=Promise.all(r)}else if(typeof t=="string")a=Wm(e,t,n);else{const r=typeof t=="function"?oi(e,t,n.custom):t;a=Promise.all(kw(e,r,n))}return a.then(()=>{e.notify("AnimationComplete",t)})}const p4={test:e=>e==="auto",parse:e=>e},Aw=e=>t=>t.test(e),Cw=[kr,ee,Sn,Bn,qS,zS,p4],p0=e=>Cw.find(Aw(e));function h4(e){return typeof e=="number"?e===0:e!==null?e==="none"||e==="0"||O1(e):!0}const f4=new Set(["brightness","contrast","saturate","opacity"]);function g4(e){const[t,n]=e.slice(0,-1).split("(");if(t==="drop-shadow")return e;const[a]=n.match(Ph)||[];if(!a)return e;const r=n.replace(a,"");let s=f4.has(t)?1:0;return a!==n&&(s*=100),t+"("+s+r+")"}const x4=/\b([a-z-]*)\(.*?\)/gu,$m={...pn,getAnimatableNone:e=>{const t=e.match(x4);return t?t.map(g4).join(" "):e}},Ym={...pn,getAnimatableNone:e=>{const t=pn.parse(e);return pn.createTransformer(e)(t.map(a=>typeof a=="number"?0:typeof a=="object"?{...a,alpha:1}:a))}},h0={...kr,transform:Math.round},y4={rotate:Bn,pathRotation:Bn,rotateX:Bn,rotateY:Bn,rotateZ:Bn,scale:Uo,scaleX:Uo,scaleY:Uo,scaleZ:Uo,skew:Bn,skewX:Bn,skewY:Bn,distance:ee,translateX:ee,translateY:ee,translateZ:ee,x:ee,y:ee,z:ee,perspective:ee,transformPerspective:ee,opacity:Ys,originX:e0,originY:e0,originZ:ee},dc={borderWidth:ee,borderTopWidth:ee,borderRightWidth:ee,borderBottomWidth:ee,borderLeftWidth:ee,borderRadius:ee,borderTopLeftRadius:ee,borderTopRightRadius:ee,borderBottomRightRadius:ee,borderBottomLeftRadius:ee,width:ee,maxWidth:ee,height:ee,maxHeight:ee,top:ee,right:ee,bottom:ee,left:ee,inset:ee,insetBlock:ee,insetBlockStart:ee,insetBlockEnd:ee,insetInline:ee,insetInlineStart:ee,insetInlineEnd:ee,padding:ee,paddingTop:ee,paddingRight:ee,paddingBottom:ee,paddingLeft:ee,paddingBlock:ee,paddingBlockStart:ee,paddingBlockEnd:ee,paddingInline:ee,paddingInlineStart:ee,paddingInlineEnd:ee,margin:ee,marginTop:ee,marginRight:ee,marginBottom:ee,marginLeft:ee,marginBlock:ee,marginBlockStart:ee,marginBlockEnd:ee,marginInline:ee,marginInlineStart:ee,marginInlineEnd:ee,fontSize:ee,backgroundPositionX:ee,backgroundPositionY:ee,...y4,zIndex:h0,fillOpacity:Ys,strokeOpacity:Ys,numOctaves:h0},b4={...dc,color:He,backgroundColor:He,outlineColor:He,fill:He,stroke:He,borderColor:He,borderTopColor:He,borderRightColor:He,borderBottomColor:He,borderLeftColor:He,filter:$m,WebkitFilter:$m,mask:Ym,WebkitMask:Ym},Ew=e=>b4[e],v4=new Set([$m,Ym]);function Nw(e,t){let n=Ew(e);return v4.has(n)||(n=pn),n.getAnimatableNone?n.getAnimatableNone(t):void 0}
vendor: 1,717 bytes, line 492
492const w4=new Set(["auto","none","0"]);function k4(e,t,n){let a=0,r;for(;a<e.length&&!r;){const s=e[a];typeof s=="string"&&!w4.has(s)&&dr(s).values.length&&(r=e[a]),a++}if(r&&n)for(const s of t)e[s]=Nw(n,r)}class A4 extends _h{constructor(t,n,a,r,s){super(t,n,a,r,s,!0)}readKeyframes(){const{unresolvedKeyframes:t,element:n,name:a}=this;if(!n||!n.current)return;super.readKeyframes();for(let d=0;d<t.length;d++){let m=t[d];if(typeof m=="string"&&(m=m.trim(),jh(m))){const p=yw(m,n.current);p!==void 0&&(t[d]=p),d===t.length-1&&(this.finalKeyframe=m)}}if(this.resolveNoneKeyframes(),!bw.has(a)||t.length!==2)return;const[r,s]=t,o=p0(r),l=p0(s),c=Jg(r),u=Jg(s);if(c!==u&&ya[a]){this.needsMeasurement=!0;return}if(o!==l)if(l0(o)&&l0(l))for(let d=0;d<t.length;d++){const m=t[d];typeof m=="string"&&(t[d]=parseFloat(m))}else ya[a]&&(this.needsMeasurement=!0)}resolveNoneKeyframes(){const{unresolvedKeyframes:t,name:n}=this,a=[];for(let r=0;r<t.length;r++)(t[r]===null||h4(t[r]))&&a.push(r);a.length&&k4(t,a,n)}measureInitialState(){const{element:t,unresolvedKeyframes:n,name:a}=this;if(!t||!t.current)return;a==="height"&&(this.suspendedScrollY=window.pageYOffset),this.measuredOrigin=ya[a](t.measureViewportBox(),window.getComputedStyle(t.current)),n[0]=this.measuredOrigin;const r=n[n.length-1];r!==void 0&&t.getValue(a,r).jump(r,!1)}measureEndState(){var l;const{element:t,name:n,unresolvedKeyframes:a}=this;if(!t||!t.current)return;const r=t.getValue(n);r&&r.jump(this.measuredOrigin,!1);const s=a.length-1,o=a[s];a[s]=ya[n](t.measureViewportBox(),window.getComputedStyle(t.current)),o!==null&&this.finalKeyframe===void 0&&(this.finalKeyframe=o),(l=this.removedTransforms)!=null&&l.length&&this.removedTransforms.forEac
vendor: 49,891 bytes, line 492
492h(([c,u])=>{t.getValue(c).set(u)}),this.resolveNoneKeyframes()}}const Fh=["borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius"];function Tw(e,t,n){if(e==null)return[];if(e instanceof EventTarget)return[e];if(typeof e=="string"){let a=document;const r=(n==null?void 0:n[e])??a.querySelectorAll(e);return r?Array.from(r):[]}return Array.from(e).filter(a=>a!=null)}const Gm=(e,t)=>t&&typeof e=="number"?t.transform(e):e;function vl(e){return R1(e)&&"offsetHeight"in e&&!("ownerSVGElement"in e)}const{schedule:Hh}=G1(queueMicrotask,!1),rn={x:!1,y:!1};function Sw(){return rn.x||rn.y}function C4(e){return e==="x"||e==="y"?rn[e]?null:(rn[e]=!0,()=>{rn[e]=!1}):rn.x||rn.y?null:(rn.x=rn.y=!0,()=>{rn.x=rn.y=!1})}function Iw(e,t){const n=Tw(e),a=new AbortController,r={passive:!0,...t,signal:a.signal};return[n,r,()=>a.abort()]}function E4(e){return!(e.pointerType==="touch"||Sw())}function N4(e,t,n={}){const[a,r,s]=Iw(e,n);return a.forEach(o=>{let l=!1,c=!1,u;const d=()=>{o.removeEventListener("pointerleave",g)},m=w=>{u&&(u(w),u=void 0),d()},p=w=>{l=!1,window.removeEventListener("pointerup",p),window.removeEventListener("pointercancel",p),c&&(c=!1,m(w))},f=()=>{l=!0,window.addEventListener("pointerup",p,r),window.addEventListener("pointercancel",p,r)},g=w=>{if(w.pointerType!=="touch"){if(l){c=!0;return}m(w)}},y=w=>{if(!E4(w))return;c=!1;const x=t(o,w);typeof x=="function"&&(u=x,o.addEventListener("pointerleave",g,r))};o.addEventListener("pointerenter",y,r),o.addEventListener("pointerdown",f,r)}),s}const jw=(e,t)=>t?e===t?!0:jw(e,t.parentElement):!1,Uh=e=>e.pointerType==="mouse"?typeof e.button!="number"||e.button<=0:e.isPrimary!==!1,T4=new Set(["BUTTON","INPUT","SELECT","TEXTAREA","A"]);function S4(e){return T4.has(e.tagName)||e.isContentEditable===!0}const I4=new Set(["INPUT","SELECT","TEXTAREA"]);function j4(e){return I4.has(e.tagName)||e.isContentEditable===!0}const wl=new WeakSet;function f0(e){return t=>{t.key==="Enter"&&e(t)}}function nd(e,t){e.dispatchEvent(new PointerEvent("pointer"+t,{isPrimary:!0,bubbles:!0}))}const P4=(e,t)=>{const n=e.currentTarget;if(!n)return;const a=f0(()=>{if(wl.has(n))return;nd(n,"down");const r=f0(()=>{nd(n,"up")}),s=()=>nd(n,"cancel");n.addEventListener("keyup",r,t),n.addEventListener("blur",s,t)});n.addEventListener("keydown",a,t),n.addEventListener("blur",()=>n.removeEventListener("keydown",a),t)};function g0(e){return Uh(e)&&!Sw()}const x0=new WeakSet;function M4(e,t,n={}){const[a,r,s]=Iw(e,n),o=l=>{const c=l.currentTarget;if(!g0(l)||x0.has(l))return;wl.add(c),n.stopPropagation&&x0.add(l);const u=t(c,l),d={...r,capture:!0},m=(g,y)=>{window.removeEventListener("pointerup",p,d),window.removeEventListener("pointercancel",f,d),wl.has(c)&&wl.delete(c),g0(g)&&typeof u=="function"&&u(g,{success:y})},p=g=>{m(g,c===window||c===document||n.useGlobalTarget||jw(c,g.target))},f=g=>{m(g,!1)};window.addEventListener("pointerup",p,d),window.addEventListener("pointercancel",f,d)};return a.forEach(l=>{(n.useGlobalTarget?window:l).addEventListener("pointerdown",o,r),vl(l)&&(l.addEventListener("focus",u=>P4(u,r)),!S4(l)&&!l.hasAttribute("tabindex")&&(l.tabIndex=0))}),s}function Vh(e){return R1(e)&&"ownerSVGElement"in e}const kl=new WeakMap;let la;const Pw=(e,t,n)=>(a,r)=>r&&r[0]?r[0][e+"Size"]:Vh(a)&&"getBBox"in a?a.getBBox()[t]:a[n],D4=Pw("inline","width","offsetWidth"),R4=Pw("block","height","offsetHeight");function O4({target:e,borderBoxSize:t}){var n;(n=kl.get(e))==null||n.forEach(a=>{a(e,{get width(){return D4(e,t)},get height(){return R4(e,t)}})})}function _4(e){e.forEach(O4)}function L4(){typeof ResizeObserver>"u"||(la=new ResizeObserver(_4))}function z4(e,t){la||L4();const n=Tw(e);return n.forEach(a=>{let r=kl.get(a);r||(r=new Set,kl.set(a,r)),r.add(t),la==null||la.observe(a)}),()=>{n.forEach(a=>{const r=kl.get(a);r==null||r.delete(t),r!=null&&r.size||la==null||la.unobserve(a)})}}const Al=new Set;let $i;function q4(){$i=()=>{const e={get width(){return window.innerWidth},get height(){return window.innerHeight}};Al.forEach(t=>t(e))},window.addEventListener("resize",$i)}function B4(e){return Al.add(e),$i||q4(),()=>{Al.delete(e),!Al.size&&typeof $i=="function"&&(window.removeEventListener("resize",$i),$i=void 0)}}function y0(e,t){return typeof e=="function"?B4(e):z4(e,t)}function F4(e){return Vh(e)&&e.tagName==="svg"}const H4=[...Cw,He,pn],U4=e=>H4.find(Aw(e)),b0=()=>({translate:0,scale:1,origin:0,originPoint:0}),Yi=()=>({x:b0(),y:b0()}),v0=()=>({min:0,max:0}),Ve=()=>({x:v0(),y:v0()}),V4=new WeakMap;function au(e){return e!==null&&typeof e=="object"&&typeof e.start=="function"}function Gs(e){return typeof e=="string"||Array.isArray(e)}const Wh=["animate","whileInView","whileFocus","whileHover","whileTap","whileDrag","exit"],$h=["initial",...Wh];function iu(e){return au(e.animate)||$h.some(t=>Gs(e[t]))}function Mw(e){return!!(iu(e)||e.variants)}function W4(e,t,n){for(const a in t){const r=t[a],s=n[a];if(Je(r))e.addValue(a,r);else if(Je(s))e.addValue(a,mr(r,{owner:e}));else if(s!==r)if(e.hasValue(a)){const o=e.getValue(a);o.liveStyle===!0?o.jump(r):o.hasAnimated||o.set(r)}else{const o=e.getStaticValue(a);e.addValue(a,mr(o!==void 0?o:r,{owner:e}))}}for(const a in n)t[a]===void 0&&e.removeValue(a);return t}const Qm={current:null},Dw={current:!1},$4=typeof window<"u";function Y4(){if(Dw.current=!0,!!$4)if(window.matchMedia){const e=window.matchMedia("(prefers-reduced-motion)"),t=()=>Qm.current=e.matches;e.addEventListener("change",t),t()}else Qm.current=!1}const w0=["AnimationStart","AnimationComplete","Update","BeforeLayoutMeasure","LayoutMeasure","LayoutAnimationStart","LayoutAnimationComplete"];let mc={};function Rw(e){mc=e}function G4(){return mc}class Q4{scrapeMotionValuesFromProps(t,n,a){return{}}constructor({parent:t,props:n,presenceContext:a,reducedMotionConfig:r,skipAnimations:s,blockInitialAnimation:o,visualState:l},c={}){this.current=null,this.children=new Set,this.isVariantNode=!1,this.isControllingVariants=!1,this.shouldReduceMotion=null,this.shouldSkipAnimations=!1,this.values=new Map,this.KeyframeResolver=_h,this.features={},this.valueSubscriptions=new Map,this.prevMotionValues={},this.hasBeenMounted=!1,this.events={},this.propEventSubscriptions={},this.notifyUpdate=()=>this.notify("Update",this.latestValues),this.render=()=>{this.current&&(this.triggerBuild(),this.renderInstance(this.current,this.renderState,this.props.style,this.projection))},this.renderScheduledAt=0,this.scheduleRender=()=>{const f=gt.now();this.renderScheduledAt<f&&(this.renderScheduledAt=f,ke.render(this.render,!1,!0))};const{latestValues:u,renderState:d}=l;this.latestValues=u,this.baseTarget={...u},this.initialValues=n.initial?{...u}:{},this.renderState=d,this.parent=t,this.props=n,this.presenceContext=a,this.depth=t?t.depth+1:0,this.reducedMotionConfig=r,this.skipAnimationsConfig=s,this.options=c,this.blockInitialAnimation=!!o,this.isControllingVariants=iu(n),this.isVariantNode=Mw(n),this.isVariantNode&&(this.variantChildren=new Set),this.manuallyAnimateOnMount=!!(t&&t.current);const{willChange:m,...p}=this.scrapeMotionValuesFromProps(n,{},this);for(const f in p){const g=p[f];u[f]!==void 0&&Je(g)&&g.set(u[f])}}mount(t){var n,a;if(this.hasBeenMounted)for(const r in this.initialValues)(n=this.values.get(r))==null||n.jump(this.initialValues[r]),this.latestValues[r]=this.initialValues[r];this.current=t,V4.set(t,this),this.projection&&!this.projection.instance&&this.projection.mount(t),this.parent&&this.isVariantNode&&!this.isControllingVariants&&(this.removeFromVariantTree=this.parent.addVariantChild(this)),this.values.forEach((r,s)=>this.bindToMotionValue(s,r)),this.reducedMotionConfig==="never"?this.shouldReduceMotion=!1:this.reducedMotionConfig==="always"?this.shouldReduceMotion=!0:(Dw.current||Y4(),this.shouldReduceMotion=Qm.current),this.shouldSkipAnimations=this.skipAnimationsConfig??!1,(a=this.parent)==null||a.addChild(this),this.update(this.props,this.presenceContext),this.hasBeenMounted=!0}unmount(){var t;this.projection&&this.projection.unmount(),Ra(this.notifyUpdate),Ra(this.render),this.valueSubscriptions.forEach(n=>n()),this.valueSubscriptions.clear(),this.removeFromVariantTree&&this.removeFromVariantTree(),(t=this.parent)==null||t.removeChild(this);for(const n in this.events)this.events[n].clear();for(const n in this.features){const a=this.features[n];a&&(a.unmount(),a.isMounted=!1)}this.current=null}addChild(t){this.children.add(t),this.enteringChildren??(this.enteringChildren=new Set),this.enteringChildren.add(t)}removeChild(t){this.children.delete(t),this.enteringChildren&&this.enteringChildren.delete(t)}bindToMotionValue(t,n){if(this.valueSubscriptions.has(t)&&this.valueSubscriptions.get(t)(),n.accelerate&&fw.has(t)&&this.current instanceof HTMLElement){const{factory:o,keyframes:l,times:c,ease:u,duration:d}=n.accelerate,m=new pw({element:this.current,name:t,keyframes:l,times:c,ease:u,duration:_t(d)}),p=o(m);this.valueSubscriptions.set(t,()=>{p(),m.cancel()});return}const a=Cr.has(t);a&&this.onBindTransform&&this.onBindTransform();const r=n.on("change",o=>{this.latestValues[t]=o,this.props.onUpdate&&ke.preRender(this.notifyUpdate),a&&this.projection&&(this.projection.isTransformDirty=!0),this.scheduleRender()});let s;typeof window<"u"&&window.MotionCheckAppearSync&&(s=window.MotionCheckAppearSync(this,t,n)),this.valueSubscriptions.set(t,()=>{r(),s&&s()})}sortNodePosition(t){return!this.current||!this.sortInstanceNodePosition||this.type!==t.type?0:this.sortInstanceNodePosition(this.current,t.current)}updateFeatures(){let t="animation";for(t in mc){const n=mc[t];if(!n)continue;const{isEnabled:a,Feature:r}=n;if(!this.features[t]&&r&&a(this.props)&&(this.features[t]=new r(this)),this.features[t]){const s=this.features[t];s.isMounted?s.update():(s.mount(),s.isMounted=!0)}}}triggerBuild(){this.build(this.renderState,this.latestValues,this.props)}measureViewportBox(){return this.current?this.measureInstanceViewportBox(this.current,this.props):Ve()}getStaticValue(t){return this.latestValues[t]}setStaticValue(t,n){this.latestValues[t]=n}update(t,n){(t.transformTemplate||this.props.transformTemplate)&&this.scheduleRender(),this.prevProps=this.props,this.props=t,this.prevPresenceContext=this.presenceContext,this.presenceContext=n;for(let a=0;a<w0.length;a++){const r=w0[a];this.propEventSubscriptions[r]&&(this.propEventSubscriptions[r](),delete this.propEventSubscriptions[r]);const s="on"+r,o=t[s];o&&(this.propEventSubscriptions[r]=this.on(r,o))}this.prevMotionValues=W4(this,this.scrapeMotionValuesFromProps(t,this.prevProps||{},this),this.prevMotionValues),this.handleChildMotionValue&&this.handleChildMotionValue()}getProps(){return this.props}getVariant(t){return this.props.variants?this.props.variants[t]:void 0}getDefaultTransition(){return this.props.transition}getTransformPagePoint(){return this.props.transformPagePoint}getClosestVariantNode(){return this.isVariantNode?this:this.parent?this.parent.getClosestVariantNode():void 0}addVariantChild(t){const n=this.getClosestVariantNode();if(n)return n.variantChildren&&n.variantChildren.add(t),()=>n.variantChildren.delete(t)}addValue(t,n){const a=this.values.get(t);n!==a&&(a&&this.removeValue(t),this.bindToMotionValue(t,n),this.values.set(t,n),this.latestValues[t]=n.get())}removeValue(t){this.values.delete(t);const n=this.valueSubscriptions.get(t);n&&(n(),this.valueSubscriptions.delete(t)),delete this.latestValues[t],this.removeValueFromRenderState(t,this.renderState)}hasValue(t){return this.values.has(t)}getValue(t,n){if(this.props.values&&this.props.values[t])return this.props.values[t];let a=this.values.get(t);return a===void 0&&n!==void 0&&(a=mr(n===null?void 0:n,{owner:this}),this.addValue(t,a)),a}readValue(t,n){let a=this.latestValues[t]!==void 0||!this.current?this.latestValues[t]:this.getBaseTargetFromProps(this.props,t)??this.readValueFromInstance(this.current,t,this.options);return a!=null&&(typeof a=="string"&&(D1(a)||O1(a))?a=parseFloat(a):!U4(a)&&pn.test(n)&&(a=Nw(t,n)),this.setBaseTarget(t,Je(a)?a.get():a)),Je(a)?a.get():a}setBaseTarget(t,n){this.baseTarget[t]=n}getBaseTarget(t){var s;const{initial:n}=this.props;let a;if(typeof n=="string"||typeof n=="object"){const o=qh(this.props,n,(s=this.presenceContext)==null?void 0:s.custom);o&&(a=o[t])}if(n&&a!==void 0)return a;const r=this.getBaseTargetFromProps(this.props,t);return r!==void 0&&!Je(r)?r:this.initialValues[t]!==void 0&&a===void 0?void 0:this.baseTarget[t]}on(t,n){return this.events[t]||(this.events[t]=new Th),this.events[t].add(n)}notify(t,...n){this.events[t]&&this.events[t].notify(...n)}scheduleRenderMicrotask(){Hh.render(this.render)}}class Ow extends Q4{constructor(){super(...arguments),this.KeyframeResolver=A4}sortInstanceNodePosition(t,n){return t.compareDocumentPosition(n)&2?1:-1}getBaseTargetFromProps(t,n){const a=t.style;return a?a[n]:void 0}removeValueFromRenderState(t,{vars:n,style:a}){delete n[t],delete a[t]}handleChildMotionValue(){this.childSubscription&&(this.childSubscription(),delete this.childSubscription);const{children:t}=this.props;Je(t)&&(this.childSubscription=t.on("change",n=>{this.current&&(this.current.textContent=`${n}`)}))}}class Ba{constructor(t){this.isMounted=!1,this.node=t}update(){}}function _w({top:e,left:t,right:n,bottom:a}){return{x:{min:t,max:n},y:{min:e,max:a}}}function K4({x:e,y:t}){return{top:t.min,right:e.max,bottom:t.max,left:e.min}}function X4(e,t){if(!t)return e;const n=t({x:e.left,y:e.top}),a=t({x:e.right,y:e.bottom});return{top:n.y,left:n.x,bottom:a.y,right:a.x}}function ad(e){return e===void 0||e===1}function Km({scale:e,scaleX:t,scaleY:n}){return!ad(e)||!ad(t)||!ad(n)}function Ga(e){return Km(e)||Lw(e)||e.z||e.rotate||e.rotateX||e.rotateY||e.skewX||e.skewY}function Lw(e){return k0(e.x)||k0(e.y)}function k0(e){return e&&e!=="0%"}function pc(e,t,n){const a=e-n,r=t*a;return n+r}function A0(e,t,n,a,r){return r!==void 0&&(e=pc(e,r,a)),pc(e,n,a)+t}function Xm(e,t=0,n=1,a,r){e.min=A0(e.min,t,n,a,r),e.max=A0(e.max,t,n,a,r)}function zw(e,{x:t,y:n}){Xm(e.x,t.translate,t.scale,t.originPoint),Xm(e.y,n.translate,n.scale,n.originPoint)}const C0=.999999999999,E0=1.0000000000001;function Z4(e,t,n,a=!1){var l;const r=n.length;if(!r)return;t.x=t.y=1;let s,o;for(let c=0;c<r;c++){s=n[c],o=s.projectionDelta;const{visualElement:u}=s.options;u&&u.props.style&&u.props.style.display==="contents"||(a&&s.options.layoutScroll&&s.scroll&&s!==s.root&&(An(e.x,-s.scroll.offset.x),An(e.y,-s.scroll.offset.y)),o&&(t.x*=o.x.scale,t.y*=o.y.scale,zw(e,o)),a&&Ga(s.latestValues)&&Cl(e,s.latestValues,(l=s.layout)==null?void 0:l.layoutBox))}t.x<E0&&t.x>C0&&(t.x=1),t.y<E0&&t.y>C0&&(t.y=1)}function An(e,t){e.min+=t,e.max+=t}function N0(e,t,n,a,r=.5){const s=we(e.min,e.max,r);Xm(e,t,n,s,a)}function T0(e,t){return typeof e=="string"?parseFloat(e)/100*(t.max-t.min):e}function Cl(e,t,n){const a=n??e;N0(e.x,T0(t.x,a.x),t.scaleX,t.scale,t.originX),N0(e.y,T0(t.y,a.y),t.scaleY,t.scale,t.originY)}function qw(e,t){return _w(X4(e.getBoundingClientRect(),t))}function J4(e,t,n){const a=qw(e,n),{scroll:r}=t;return r&&(An(a.x,r.offset.x),An(a.y,r.offset.y)),a}const e3={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"},t3=Ar.length;function n3(e,t,n){let a="",r=!0;for(let o=0;o<t3;o++){const l=Ar[o],c=e[l];if(c===void 0)continue;let u=!0;if(typeof c=="number")u=c===(l.startsWith("scale")?1:0);else{const d=parseFloat(c);u=l.startsWith("scale")?d===1:d===0}if(!u||n){const d=Gm(c,dc[l]);if(!u){r=!1;const m=e3[l]||l;a+=`${m}(${d}) `}n&&(t[l]=d)}}const s=e.pathRotation;return s&&(r=!1,a+=`rotate(${Gm(s,dc.pathRotation)}) `),a=a.trim(),n?a=n(t,r?"":a):r&&(a="none"),a}function Yh(e,t,n){const{style:a,vars:r,transformOrigin:s}=e;let o=!1,l=!1;for(const c in t){const u=t[c];if(Cr.has(c)){o=!0;continue}else if(K1(c)){r[c]=u;continue}else{const d=Gm(u,dc[c]);c.startsWith("origin")?(l=!0,s[c]=d):a[c]=d}}if(t.transform||(o||n?a.transform=n3(t,e.transform,n):a.transform&&(a.transform="none")),l){const{originX:c="50%",originY:u="50%",originZ:d=0}=s;a.transformOrigin=`${c} ${u} ${d}`}}function Bw(e,{style:t,vars:n},a,r){const s=e.style;let o;for(o in t)s[o]=t[o];r==null||r.applyProjectionStyles(s,a);for(o in n)s.setProperty(o,n[o])}function S0(e,t){return t.max===t.min?0:e/(t.max-t.min)*100}const Hr={correct:(e,t)=>{if(!t.target)return e;if(typeof e=="string")if(ee.test(e))e=parseFloat(e);else return e;const n=S0(e,t.target.x),a=S0(e,t.target.y);return`${n}% ${a}%`}},a3={correct:(e,{treeScale:t,projectionDelta:n})=>{const a=e,r=pn.parse(e);if(r.length>5)return a;const s=pn.createTransformer(e),o=typeof r[0]!="number"?1:0,l=n.x.scale*t.x,c=n.y.scale*t.y;r[0+o]/=l,r[1+o]/=c;const u=we(l,c,.5);return typeof r[2+o]=="number"&&(r[2+o]/=u),typeof r[3+o]=="number"&&(r[3+o]/=u),s(r)}},Zm={borderRadius:{...Hr,applyTo:[...Fh]},borderTopLeftRadius:Hr,borderTopRightRadius:Hr,borderBottomLeftRadius:Hr,borderBottomRightRadius:Hr,boxShadow:a3};function Fw(e,{layout:t,layoutId:n}){return Cr.has(e)||e.startsWith("origin")||(t||n!==void 0)&&(!!Zm[e]||e==="opacity")}function Gh(e,t,n){var o;const a=e.style,r=t==null?void 0:t.style,s={};if(!a)return s;for(const l in a)(Je(a[l])||r&&Je(r[l])||Fw(l,e)||((o=n==null?void 0:n.getValue(l))==null?void 0:o.liveStyle)!==void 0)&&(s[l]=a[l]);return s}function i3(e){return window.getComputedStyle(e)}class r3 extends Ow{constructor(){super(...arguments),this.type="html",this.renderInstance=Bw}mount(t){tu(!!t.style),super.mount(t)}readValueFromInstance(t,n){var a;if(Cr.has(n))return(a=this.projection)!=null&&a.isProjecting?Lm(n):EI(t,n);{const r=i3(t),s=(K1(n)?r.getPropertyValue(n):r[n])||0;return typeof s=="string"?s.trim():s}}measureInstanceViewportBox(t,{transformPagePoint:n}){return qw(t,n)}build(t,n,a){Yh(t,n,a.transformTemplate)}scrapeMotionValuesFromProps(t,n,a){return Gh(t,n,a)}}const s3={offset:"stroke-dashoffset",array:"stroke-dasharray"},o3={offset:"strokeDashoffset",array:"strokeDasharray"};function l3(e,t,n=1,a=0,r=!0){e.pathLength=1;const s=r?s3:o3;e[s.offset]=`${-a}`,e[s.array]=`${t} ${n}`}const c3=["offsetDistance","offsetPath","offsetRotate","offsetAnchor"];function Hw(e,{attrX:t,attrY:n,attrScale:a,pathLength:r,pathSpacing:s=1,pathOffset:o=0,...l},c,u,d){if(Yh(e,l,u),c){e.style.viewBox&&(e.attrs.viewBox=e.style.viewBox);return}e.attrs=e.style,e.style={};const{attrs:m,style:p}=e;m.transform&&(p.transform=m.transform,delete m.transform),(p.transform||m.transformOrigin)&&(p.transformOrigin=m.transformOrigin??"50% 50%",delete m.transformOrigin),p.transform&&(p.transformBox=(d==null?void 0:d.transformBox)??"fill-box",delete m.transformBox);for(const f of c3)m[f]!==void 0&&(p[f]=m[f],delete m[f]);t!==void 0&&(m.x=t),n!==void 0&&(m.y=n),a!==void 0&&(m.scale=a),r!==void 0&&l3(m,r,s,o,!1)}const Uw=new Set(["baseFrequency","diffuseConstant","kernelMatrix","kernelUnitLength","keySplines","keyTimes","limitingConeAngle","markerHeight","markerWidth","numOctaves","targetX","targetY","surfaceScale","specularConstant","specularExponent","stdDeviation","tableValues","viewBox","gradientTransform","pathLength","startOffset","textLength","lengthAdjust"]),Vw=e=>typeof e=="string"&&e.toLowerCase()==="svg";function u3(e,t,n,a){Bw(e,t,void 0,a);for(const r in t.attrs)e.setAttribute(Uw.has(r)?r:Bh(r),t.attrs[r])}function Ww(e,t,n){const a=Gh(e,t,n);for(const r in e)if(Je(e[r])||Je(t[r])){const s=Ar.indexOf(r)!==-1?"attr"+r.charAt(0).toUpperCase()+r.substring(1):r;a[s]=e[r]}return a}class d3 extends Ow{constructor(){super(...arguments),this.type="svg",this.isSVGTag=!1,this.measureInstanceViewportBox=Ve}getBaseTargetFromProps(t,n){return t[n]}readValueFromInstance(t,n){if(Cr.has(n)){const a=Ew(n);return a&&a.default||0}return n=Uw.has(n)?n:Bh(n),t.getAttribute(n)}scrapeMotionValuesFromProps(t,n,a){return Ww(t,n,a)}build(t,n,a){Hw(t,n,this.isSVGTag,a.transformTemplate,a.style)}renderInstance(t,n,a,r){u3(t,n,a,r)}mount(t){this.isSVGTag=Vw(t.tagName),super.mount(t)}}const m3=$h.length;function $w(e){if(!e)return;if(!e.isControllingVariants){const n=e.parent?$w(e.parent)||{}:{};return e.props.initial!==void 0&&(n.initial=e.props.initial),n}const t={};for(let n=0;n<m3;n++){const a=$h[n],r=e.props[a];(Gs(r)||r===!1)&&(t[a]=r)}return t}function Yw(e,t){if(!Array.isArray(t))return!1;const n=t.length;if(n!==e.length)return!1;for(let a=0;a<n;a++)if(t[a]!==e[a])return!1;return!0}const p3=[...Wh].reverse(),h3=Wh.length;function f3(e){return t=>Promise.all(t.map(({animation:n,options:a})=>m4(e,n,a)))}function g3(e){let t=f3(e),n=I0(),a=!0,r=!1;const s=u=>(d,m)=>{var f;const p=oi(e,m,u==="exit"?(f=e.presenceContext)==null?void 0:f.custom:void 0);if(p){const{transition:g,transitionEnd:y,...w}=p;d={...d,...w,...y}}return d};function o(u){t=u(e)}function l(u){const{props:d}=e,m=$w(e.parent)||{},p=[],f=new Set;let g={},y=1/0;for(let x=0;x<h3;x++){const b=p3[x],v=n[b],N=d[b]!==void 0?d[b]:m[b],I=Gs(N),C=b===u?v.isActive:null;C===!1&&(y=x);let R=N===m[b]&&N!==d[b]&&I;if(R&&(a||r)&&e.manuallyAnimateOnMount&&(R=!1),v.protectedKeys={...g},!v.isActive&&C===null||!N&&!v.prevProp||au(N)||typeof N=="boolean")continue;if(b==="exit"&&v.isActive&&C!==!0){v.prevResolvedValues&&(g={...g,...v.prevResolvedValues});continue}const O=x3(v.prevProp,N);let H=O||b===u&&v.isActive&&!R&&I||x>y&&I,P=!1;const Y=Array.isArray(N)?N:[N];let K=Y.reduce(s(b),{});C===!1&&(K={});const{prevResolvedValues:ie={}}=v,B={...ie,...K},D=L=>{H=!0,f.has(L)&&(P=!0,f.delete(L)),v.needsAnimating[L]=!0;const U=e.getValue(L);U&&(U.liveStyle=!1)};for(const L in B){const U=K[L],A=ie[L];if(g.hasOwnProperty(L))continue;let te=!1;Um(U)&&Um(A)?te=!Yw(U,A)||O:te=U!==A,te?U!=null?D(L):f.add(L):U!==void 0&&f.has(L)?D(L):v.protectedKeys[L]=!0}v.prevProp=N,v.prevResolvedValues=K,v.isActive&&(g={...g,...K}),(a||r)&&e.blockInitialAnimation&&(H=!1);const q=R&&O;H&&(!q||P)&&p.push(...Y.map(L=>{const U={type:b};if(typeof L=="string"&&(a||r)&&!q&&e.manuallyAnimateOnMount&&e.parent){const{parent:A}=e,te=oi(A,L);if(A.enteringChildren&&te){const{delayChildren:ae}=te.transition||{};U.delay=gw(A.enteringChildren,e,ae)}}return{animation:L,options:U}}))}if(f.size){const x={};if(typeof d.initial!="boolean"){const b=oi(e,Array.isArray(d.initial)?d.initial[0]:d.initial);b&&b.transition&&(x.transition=b.transition)}f.forEach(b=>{const v=e.getBaseTarget(b),N=e.getValue(b);N&&(N.liveStyle=!0),x[b]=v??null}),p.push({animation:x})}let w=!!p.length;return a&&(d.initial===!1||d.initial===d.animate)&&!e.manuallyAnimateOnMount&&(w=!1),a=!1,r=!1,w?t(p):Promise.resolve()}function c(u,d){var p;if(n[u].isActive===d)return Promise.resolve();(p=e.variantChildren)==null||p.forEach(f=>{var g;return(g=f.animationState)==null?void 0:g.setActive(u,d)}),n[u].isActive=d;const m=l(u);for(const f in n)n[f].protectedKeys={};return m}return{animateChanges:l,setActive:c,setAnimateFunction:o,getState:()=>n,reset:()=>{n=I0(),r=!0}}}function x3(e,t){return typeof t=="string"?t!==e:Array.isArray(t)?!Yw(t,e):!1}function Va(e=!1){return{isActive:e,protectedKeys:{},needsAnimating:{},prevResolvedValues:{}}}function I0(){return{animate:Va(!0),whileInView:Va(),whileHover:Va(),whileTap:Va(),whileDrag:Va(),whileFocus:Va(),exit:Va()}}function Jm(e,t){e.min=t.min,e.max=t.max}function an(e,t){Jm(e.x,t.x),Jm(e.y,t.y)}function j0(e,t){e.translate=t.translate,e.scale=t.scale,e.originPoint=t.originPoint,e.origin=t.origin}const Gw=1e-4,y3=1-Gw,b3=1+Gw,Qw=.01,v3=0-Qw,w3=0+Qw;function xt(e){return e.max-e.min}function k3(e,t,n){return Math.abs(e-t)<=n}function P0(e,t,n,a=.5){e.origin=a,e.originPoint=we(t.min,t.max,e.origin),e.scale=xt(n)/xt(t),e.translate=we(n.min,n.max,e.origin)-e.originPoint,(e.scale>=y3&&e.scale<=b3||isNaN(e.scale))&&(e.scale=1),(e.translate>=v3&&e.translate<=w3||isNaN(e.translate))&&(e.translate=0)}function fs(e,t,n,a){P0(e.x,t.x,n.x,a?a.originX:void 0),P0(e.y,t.y,n.y,a?a.originY:void 0)}function M0(e,t,n,a=0){const r=a?we(n.min,n.max,a):n.min;e.min=r+t.min,e.max=e.min+xt(t)}function A3(e,t,n,a){M0(e.x,t.x,n.x,a==null?void 0:a.x),M0(e.y,t.y,n.y,a==null?void 0:a.y)}function D0(e,t,n,a=0){const r=a?we(n.min,n.max,a):n.min;e.min=t.min-r,e.max=e.min+xt(t)}function hc(e,t,n,a){D0(e.x,t.x,n.x,a==null?void 0:a.x),D0(e.y,t.y,n.y,a==null?void 0:a.y)}function R0(e,t,n,a,r){return e-=t,e=pc(e,1/n,a),r!==void 0&&(e=pc(e,1/r,a)),e}function C3(e,t=0,n=1,a=.5,r,s=e,o=e){if(Sn.test(t)&&(t=parseFloat(t),t=we(o.min,o.max,t/100)-o.min),typeof t!="number")return;let l=we(s.min,s.max,a);e===s&&(l-=t),e.min=R0(e.min,t,n,l,r),e.max=R0(e.max,t,n,l,r)}function O0(e,t,[n,a,r],s,o){C3(e,t[n],t[a],t[r],t.scale,s,o)}const E3=["x","scaleX","originX"],N3=["y","scaleY","originY"];function _0(e,t,n,a){O0(e.x,t,E3,n?n.x:void 0,a?a.x:void 0),O0(e.y,t,N3,n?n.y:void 0,a?a.y:void 0)}function L0(e){return e.translate===0&&e.scale===1}function Kw(e){return L0(e.x)&&L0(e.y)}function z0(e,t){return e.min===t.min&&e.max===t.max}function T3(e,t){return z0(e.x,t.x)&&z0(e.y,t.y)}function q0(e,t){return Math.round(e.min)===Math.round(t.min)&&Math.round(e.max)===Math.round(t.max)}function Xw(e,t){return q0(e.x,t.x)&&q0(e.y,t.y)}function B0(e){return xt(e.x)/xt(e.y)}function F0(e,t){return e.translate===t.translate&&e.scale===t.scale&&e.originPoint===t.originPoint}function wn(e){return[e("x"),e("y")]}function S3(e,t,n){let a="";const r=e.x.translate/t.x,s=e.y.translate/t.y,o=(n==null?void 0:n.z)||0;if((r||s||o)&&(a=`translate3d(${r}px, ${s}px, ${o}px) `),(t.x!==1||t.y!==1)&&(a+=`scale(${1/t.x}, ${1/t.y}) `),n){const{transformPerspective:u,rotate:d,pathRotation:m,rotateX:p,rotateY:f,skewX:g,skewY:y}=n;u&&(a=`perspective(${u}px) ${a}`),d&&(a+=`rotate(${d}deg) `),m&&(a+=`rotate(${m}deg) `),p&&(a+=`rotateX(${p}deg) `),f&&(a+=`rotateY(${f}deg) `),g&&(a+=`skewX(${g}deg) `),y&&(a+=`skewY(${y}deg) `)}const l=e.x.scale*t.x,c=e.y.scale*t.y;return(l!==1||c!==1)&&(a+=`scale(${l}, ${c})`),a||"none"}const I3=Fh.length,H0=e=>typeof e=="string"?parseFloat(e):e,U0=e=>typeof e=="number"||ee.test(e);function j3(e,t,n,a,r,s){r?(e.opacity=we(0,n.opacity??1,P3(a)),e.opacityExit=we(t.opacity??1,0,M3(a))):s&&(e.opacity=we(t.opacity??1,n.opacity??1,a));for(let o=0;o<I3;o++){const l=Fh[o];let c=V0(t,l),u=V0(n,l);if(c===void 0&&u===void 0)continue;c||(c=0),u||(u=0),c===0||u===0||U0(c)===U0(u)?(e[l]=Math.max(we(H0(c),H0(u),a),0),(Sn.test(u)||Sn.test(c))&&(e[l]+="%")):e[l]=u}(t.rotate||n.rotate)&&(e.rotate=we(t.rotate||0,n.rotate||0,a))}function V0(e,t){return e[t]!==void 0?e[t]:e.borderRadius}const P3=Zw(0,.5,V1),M3=Zw(.5,.95,Kt);function Zw(e,t,n){return a=>a<e?0:a>t?1:n($s(e,t,a))}function D3(e,t,n){const a=Je(e)?e:mr(e);return a.start(zh("",a,t,n)),a.animation}function Qs(e,t,n,a={passive:!0}){return e.addEventListener(t,n,a),()=>e.removeEventListener(t,n,a)}const R3=(e,t)=>e.depth-t.depth;class O3{constructor(){this.children=[],this.isDirty=!1}add(t){Nh(this.children,t),this.isDirty=!0}remove(t){sc(this.children,t),this.isDirty=!0}forEach(t){this.isDirty&&this.children.sort(R3),this.isDirty=!1,this.children.forEach(t)}}function _3(e,t){const n=gt.now(),a=({timestamp:r})=>{const s=r-n;s>=t&&(Ra(a),e(s-t))};return ke.setup(a,!0),()=>Ra(a)}function El(e){return Je(e)?e.get():e}class L3{constructor(){this.members=[]}add(t){Nh(this.members,t);for(let n=this.members.length-1;n>=0;n--){const a=this.members[n];if(a===t||a===this.lead||a===this.prevLead)continue;const r=a.instance;(!r||r.isConnected===!1)&&!a.snapshot&&(sc(this.members,a),a.unmount())}t.scheduleRender()}remove(t){if(sc(this.members,t),t===this.prevLead&&(this.prevLead=void 0),t===this.lead){const n=this.members[this.members.length-1];n&&this.promote(n)}}relegate(t){var n;for(let a=this.members.indexOf(t)-1;a>=0;a--){const r=this.members[a];if(r.isPresent!==!1&&((n=r.instance)==null?void 0:n.isConnected)!==!1)return this.promote(r),!0}return!1}promote(t,n){var r;const a=this.lead;if(t!==a&&(this.prevLead=a,this.lead=t,t.show(),a)){a.updateSnapshot(),t.scheduleRender();const{layoutDependency:s}=a.options,{layoutDependency:o}=t.options;(s===void 0||s!==o)&&(t.resumeFrom=a,n&&(a.preserveOpacity=!0),a.snapshot&&(t.snapshot=a.snapshot,t.snapshot.latestValues=a.animationValues||a.latestValues),(r=t.root)!=null&&r.isUpdating&&(t.isLayoutDirty=!0)),t.options.crossfade===!1&&a.hide()}}exitAnimationComplete(){this.members.forEach(t=>{var n,a,r,s,o;(a=(n=t.options).onExitComplete)==null||a.call(n),(o=(r=t.resumingFrom)==null?void 0:(s=r.options).onExitComplete)==null||o.call(s)})}scheduleRender(){this.members.forEach(t=>t.instance&&t.scheduleRender(!1))}removeLeadSnapshot(){var t;(t=this.lead)!=null&&t.snapshot&&(this.lead.snapshot=void 0)}}const Nl={hasAnimatedSinceResize:!0,hasEverUpdated:!1},id=["","X","Y","Z"],z3=1e3;let q3=0;function rd(e,t,n,a){const{latestValues:r}=t;r[e]&&(n[e]=r[e],t.setStaticValue(e,0),a&&(a[e]=0))}function Jw(e){if(e.hasCheckedOptimisedAppear=!0,e.root===e)return;const{visualElement:t}=e.options;if(!t)return;const n=ww(t);if(window.MotionHasOptimisedAnimation(n,"transform")){const{layout:r,layoutId:s}=e.options;window.MotionCancelOptimisedAnimation(n,"transform",ke,!(r||s))}const{parent:a}=e;a&&!a.hasCheckedOptimisedAppear&&Jw(a)}function e2({attachResizeListener:e,defaultParent:t,measureScroll:n,checkIsScrollRoot:a,resetTransform:r}){return class{constructor(o={},l=t==null?void 0:t()){this.id=q3++,this.animationId=0,this.animationCommitId=0,this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.isProjectionDirty=!1,this.isSharedProjectionDirty=!1,this.isTransformDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.hasCheckedOptimisedAppear=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.hasTreeAnimated=!1,this.layoutVersion=0,this.updateScheduled=!1,this.scheduleUpdate=()=>this.update(),this.projectionUpdateScheduled=!1,this.checkUpdateFailed=()=>{this.isUpdating&&(this.isUpdating=!1,this.clearAllSnapshots())},this.updateProjection=()=>{this.projectionUpdateScheduled=!1,this.nodes.forEach(H3),this.nodes.forEach(G3),this.nodes.forEach(Q3),this.nodes.forEach(U3)},this.resolvedRelativeTargetAt=0,this.linkedParentVersion=0,this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.latestValues=o,this.root=l?l.root||l:this,this.path=l?[...l.path,l]:[],this.parent=l,this.depth=l?l.depth+1:0;for(let c=0;c<this.path.length;c++)this.path[c].shouldResetTransform=!0;this.root===this&&(this.nodes=new O3)}addEventListener(o,l){return this.eventHandlers.has(o)||this.eventHandlers.set(o,new Th),this.eventHandlers.get(o).add(l)}notifyListeners(o,...l){const c=this.eventHandlers.get(o);c&&c.notify(...l)}hasListeners(o){return this.eventHandlers.has(o)}mount(o){if(this.instance)return;this.isSVG=Vh(o)&&!F4(o),this.instance=o;const{layoutId:l,layout:c,visualElement:u}=this.options;if(u&&!u.current&&u.mount(o),this.root.nodes.add(this),this.parent&&this.parent.children.add(this),this.root.hasTreeAnimated&&(c||l)&&(this.isLayoutDirty=!0),e){let d,m=0;const p=()=>this.root.updateBlockedByResize=!1;ke.read(()=>{m=window.innerWidth}),e(o,()=>{const f=window.innerWidth;f!==m&&(m=f,this.root.updateBlockedByResize=!0,d&&d(),d=_3(p,250),Nl.hasAnimatedSinceResize&&(Nl.hasAnimatedSinceResize=!1,this.nodes.forEach(Y0)))})}l&&this.root.registerSharedNode(l,this),this.options.animate!==!1&&u&&(l||c)&&this.addEventListener("didUpdate",({delta:d,hasLayoutChanged:m,hasRelativeLayoutChanged:p,layout:f})=>{if(this.isTreeAnimationBlocked()){this.target=void 0,this.relativeTarget=void 0;return}const g=this.options.transition||u.getDefaultTransition()||ej,{onLayoutAnimationStart:y,onLayoutAnimationComplete:w}=u.getProps(),x=!this.targetLayout||!Xw(this.targetLayout,f),b=!m&&p;if(this.options.layoutRoot||this.resumeFrom||b||m&&(x||!this.currentAnimation)){this.resumeFrom&&(this.resumingFrom=this.resumeFrom,this.resumingFrom.resumingFrom=void 0);const v={...Lh(g,"layout"),onPlay:y,onComplete:w};(u.shouldReduceMotion||this.options.layoutRoot)&&(v.delay=0,v.type=!1),this.startAnimation(v),this.setAnimationOrigin(d,b,v.path)}else m||Y0(this),this.isLead()&&this.options.onExitComplete&&this.options.onExitComplete();this.targetLayout=f})}unmount(){this.options.layoutId&&this.willUpdate(),this.root.nodes.remove(this);const o=this.getStack();o&&o.remove(this),this.parent&&this.parent.children.delete(this),this.instance=void 0,this.eventHandlers.clear(),Ra(this.updateProjection)}blockUpdate(){this.updateManuallyBlocked=!0}unblockUpdate(){this.updateManuallyBlocked=!1}isUpdateBlocked(){return this.updateManuallyBlocked||this.updateBlockedByResize}isTreeAnimationBlocked(){return this.isAnimationBlocked||this.parent&&this.parent.isTreeAnimationBlocked()||!1}startUpdate(){this.isUpdateBlocked()||(this.isUpdating=!0,this.nodes&&this.nodes.forEach(K3),this.animationId++)}getTransformTemplate(){const{visualElement:o}=this.options;return o&&o.getProps().transformTemplate}willUpdate(o=!0){if(this.root.hasTreeAnimated=!0,this.root.isUpdateBlocked()){this.options.onExitComplete&&this.options.onExitComplete();return}if(window.MotionCancelOptimisedAnimation&&!this.hasCheckedOptimisedAppear&&Jw(this),!this.root.isUpdating&&this.root.startUpdate(),this.isLayoutDirty)return;this.isLayoutDirty=!0;for(let d=0;d<this.path.length;d++){const m=this.path[d];m.shouldResetTransform=!0,(typeof m.latestValues.x=="string"||typeof m.latestValues.y=="string")&&(m.isLayoutDirty=!0),m.updateScroll("snapshot"),m.options.layoutRoot&&m.willUpdate(!1)}const{layoutId:l,layout:c}=this.options;if(l===void 0&&!c)return;const u=this.getTransformTemplate();this.prevTransformTemplateValue=u?u(this.latestValues,""):void 0,this.updateSnapshot(),o&&this.notifyListeners("willUpdate")}update(){if(this.updateScheduled=!1,this.isUpdateBlocked()){const c=this.updateBlockedByResize;this.unblockUpdate(),this.updateBlockedByResize=!1,this.clearAllSnapshots(),c&&this.nodes.forEach(W3),this.nodes.forEach(W0);return}if(this.animationId<=this.animationCommitId){this.nodes.forEach($0);return}this.animationCommitId=this.animationId,this.isUpdating?(this.isUpdating=!1,this.nodes.forEach($3),this.nodes.forEach(Y3),this.nodes.forEach(B3),this.nodes.forEach(F3)):this.nodes.forEach($0),this.clearAllSnapshots();const l=gt.now();Ze.delta=Mn(0,1e3/60,l-Ze.timestamp),Ze.timestamp=l,Ze.isProcessing=!0,Ku.update.process(Ze),Ku.preRender.process(Ze),Ku.render.process(Ze),Ze.isProcessing=!1}didUpdate(){this.updateScheduled||(this.updateScheduled=!0,Hh.read(this.scheduleUpdate))}clearAllSnapshots(){this.nodes.forEach(V3),this.sharedNodes.forEach(X3)}scheduleUpdateProjection(){this.projectionUpdateScheduled||(this.projectionUpdateScheduled=!0,ke.preRender(this.updateProjection,!1,!0))}scheduleCheckAfterUnmount(){ke.postRender(()=>{this.isLayoutDirty?this.root.didUpdate():this.root.checkUpdateFailed()})}updateSnapshot(){this.snapshot||!this.instance||(this.snapshot=this.measure(),this.snapshot&&!xt(this.snapshot.measuredBox.x)&&!xt(this.snapshot.measuredBox.y)&&(this.snapshot=void 0))}updateLayout(){if(!this.instance||(this.updateScroll(),!(this.options.alwaysMeasureLayout&&this.isLead())&&!this.isLayoutDirty))return;if(this.resumeFrom&&!this.resumeFrom.instance)for(let c=0;c<this.path.length;c++)this.path[c].updateScroll();const o=this.layout;this.layout=this.measure(!1),this.layoutVersion++,this.layoutCorrected||(this.layoutCorrected=Ve()),this.isLayoutDirty=!1,this.projectionDelta=void 0,this.notifyListeners("measure",this.layout.layoutBox);const{visualElement:l}=this.options;l&&l.notify("LayoutMeasure",this.layout.layoutBox,o?o.layoutBox:void 0)}updateScroll(o="measure"){let l=!!(this.options.layoutScroll&&this.instance);if(this.scroll&&this.scroll.animationId===this.root.animationId&&this.scroll.phase===o&&(l=!1),l&&this.instance){const c=a(this.instance);this.scroll={animationId:this.root.animationId,phase:o,isRoot:c,offset:n(this.instance),wasRoot:this.scroll?this.scroll.isRoot:c}}}resetTransform(){if(!r)return;const o=this.isLayoutDirty||this.shouldResetTransform||this.options.alwaysMeasureLayout,l=this.projectionDelta&&!Kw(this.projectionDelta),c=this.getTransformTemplate(),u=c?c(this.latestValues,""):void 0,d=u!==this.prevTransformTemplateValue;o&&this.instance&&(l||Ga(this.latestValues)||d)&&(r(this.instance,u),this.shouldResetTransform=!1,this.scheduleRender())}measure(o=!0){const l=this.measurePageBox();let c=this.removeElementScroll(l);return o&&(c=this.removeTransform(c)),tj(c),{animationId:this.root.animationId,measuredBox:l,layoutBox:c,latestValues:{},source:this.id}}measurePageBox(){var u;const{visualElement:o}=this.options;if(!o)return Ve();const l=o.measureViewportBox();if(!(((u=this.scroll)==null?void 0:u.wasRoot)||this.path.some(nj))){const{scroll:d}=this.root;d&&(An(l.x,d.offset.x),An(l.y,d.offset.y))}return l}removeElementScroll(o){var c;const l=Ve();if(an(l,o),(c=this.scroll)!=null&&c.wasRoot)return l;for(let u=0;u<this.path.length;u++){const d=this.path[u],{scroll:m,options:p}=d;d!==this.root&&m&&p.layoutScroll&&(m.wasRoot&&an(l,o),An(l.x,m.offset.x),An(l.y,m.offset.y))}return l}applyTransform(o,l=!1,c){var d,m;const u=c||Ve();an(u,o);for(let p=0;p<this.path.length;p++){const f=this.path[p];!l&&f.options.layoutScroll&&f.scroll&&f!==f.root&&(An(u.x,-f.scroll.offset.x),An(u.y,-f.scroll.offset.y)),Ga(f.latestValues)&&Cl(u,f.latestValues,(d=f.layout)==null?void 0:d.layoutBox)}return Ga(this.latestValues)&&Cl(u,this.latestValues,(m=this.layout)==null?void 0:m.layoutBox),u}removeTransform(o){var c;const l=Ve();an(l,o);for(let u=0;u<this.path.length;u++){const d=this.path[u];if(!Ga(d.latestValues))continue;let m;d.instance&&(Km(d.latestValues)&&d.updateSnapshot(),m=Ve(),an(m,d.measurePageBox())),_0(l,d.latestValues,(c=d.snapshot)==null?void 0:c.layoutBox,m)}return Ga(this.latestValues)&&_0(l,this.latestValues),l}setTargetDelta(o){this.targetDelta=o,this.root.scheduleUpdateProjection(),this.isProjectionDirty=!0}setOptions(o){this.options={...this.options,...o,crossfade:o.crossfade!==void 0?o.crossfade:!0}}clearMeasurements(){this.scroll=void 0,this.layout=void 0,this.snapshot=void 0,this.prevTransformTemplateValue=void 0,this.targetDelta=void 0,this.target=void 0,this.isLayoutDirty=!1}forceRelativeParentToResolveTarget(){this.relativeParent&&this.relativeParent.resolvedRelativeTargetAt!==Ze.timestamp&&this.relativeParent.resolveTargetDelta(!0)}resolveTargetDelta(o=!1){var f;const l=this.getLead();this.isProjectionDirty||(this.isProjectionDirty=l.isProjectionDirty),this.isTransformDirty||(this.isTransformDirty=l.isTransformDirty),this.isSharedProjectionDirty||(this.isSharedProjectionDirty=l.isSharedProjectionDirty);const c=!!this.resumingFrom||this!==l;if(!(o||c&&this.isSharedProjectionDirty||this.isProjectionDirty||(f=this.parent)!=null&&f.isProjectionDirty||this.attemptToResolveRelativeTarget||this.root.updateBlockedByResize))return;const{layout:d,layoutId:m}=this.options;if(!this.layout||!(d||m))return;this.resolvedRelativeTargetAt=Ze.timestamp;const p=this.getClosestProjectingParent();p&&this.linkedParentVersion!==p.layoutVersion&&!p.options.layoutRoot&&this.removeRelativeTarget(),!this.targetDelta&&!this.relativeTarget&&(this.options.layoutAnchor!==!1&&p&&p.layout?this.createRelativeTarget(p,this.layout.layoutBox,p.layout.layoutBox):this.removeRelativeTarget()),!(!this.relativeTarget&&!this.targetDelta)&&(this.target||(this.target=Ve(),this.targetWithTransforms=Ve()),this.relativeTarget&&this.relativeTargetOrigin&&this.relativeParent&&this.relativeParent.target?(this.forceRelativeParentToResolveTarget(),A3(this.target,this.relativeTarget,this.relativeParent.target,this.options.layoutAnchor||void 0)):this.targetDelta?(this.resumingFrom?this.applyTransform(this.layout.layoutBox,!1,this.target):an(this.target,this.layout.layoutBox),zw(this.target,this.targetDelta)):an(this.target,this.layout.layoutBox),this.attemptToResolveRelativeTarget&&(this.attemptToResolveRelativeTarget=!1,this.options.layoutAnchor!==!1&&p&&!!p.resumingFrom==!!this.resumingFrom&&!p.options.layoutScroll&&p.target&&this.animationProgress!==1?this.createRelativeTarget(p,this.target,p.target):this.relativeParent=this.relativeTarget=void 0))}getClosestProjectingParent(){if(!(!this.parent||Km(this.parent.latestValues)||Lw(this.parent.latestValues)))return this.parent.isProjecting()?this.parent:this.parent.getClosestProjectingParent()}isProjecting(){return!!((this.relativeTarget||this.targetDelta||this.options.layoutRoot)&&this.layout)}createRelativeTarget(o,l,c){this.relativeParent=o,this.linkedParentVersion=o.layoutVersion,this.forceRelativeParentToResolveTarget(),this.relativeTarget=Ve(),this.relativeTargetOrigin=Ve(),hc(this.relativeTargetOrigin,l,c,this.options.layoutAnchor||void 0),an(this.relativeTarget,this.relativeTargetOrigin)}removeRelativeTarget(){this.relativeParent=this.relativeTarget=void 0}calcProjection(){var g;const o=this.getLead(),l=!!this.resumingFrom||this!==o;let c=!0;if((this.isProjectionDirty||(g=this.parent)!=null&&g.isProjectionDirty)&&(c=!1),l&&(this.isSharedProjectionDirty||this.isTransformDirty)&&(c=!1),this.resolvedRelativeTargetAt===Ze.timestamp&&(c=!1),c)return;const{layout:u,layoutId:d}=this.options;if(this.isTreeAnimating=!!(this.parent&&this.parent.isTreeAnimating||this.currentAnimation||this.pendingAnimation),this.isTreeAnimating||(this.targetDelta=this.relativeTarget=void 0),!this.layout||!(u||d))return;an(this.layoutCorrected,this.layout.layoutBox);const m=this.treeScale.x,p=this.treeScale.y;Z4(this.layoutCorrected,this.treeScale,this.path,l),o.layout&&!o.target&&(this.treeScale.x!==1||this.treeScale.y!==1)&&(o.target=o.layout.layoutBox,o.targetWithTransforms=Ve());const{target:f}=o;if(!f){this.prevProjectionDelta&&(this.createProjectionDeltas(),this.scheduleRender());return}!this.projectionDelta||!this.prevProjectionDelta?this.createProjectionDeltas():(j0(this.prevProjectionDelta.x,this.projectionDelta.x),j0(this.prevProjectionDelta.y,this.projectionDelta.y)),fs(this.projectionDelta,this.layoutCorrected,f,this.latestValues),(this.treeScale.x!==m||this.treeScale.y!==p||!F0(this.projectionDelta.x,this.prevProjectionDelta.x)||!F0(this.projectionDelta.y,this.prevProjectionDelta.y))&&(this.hasProjected=!0,this.scheduleRender(),this.notifyListeners("projectionUpdate",f))}hide(){this.isVisible=!1}show(){this.isVisible=!0}scheduleRender(o=!0){var l;if((l=this.options.visualElement)==null||l.scheduleRender(),o){const c=this.getStack();c&&c.scheduleRender()}this.resumingFrom&&!this.resumingFrom.instance&&(this.resumingFrom=void 0)}createProjectionDeltas(){this.prevProjectionDelta=Yi(),this.projectionDelta=Yi(),this.projectionDeltaWithTransform=Yi()}setAnimationOrigin(o,l=!1,c){const u=this.snapshot,d=u?u.latestValues:{},m={...this.latestValues},p=Yi();(!this.relativeParent||!this.relativeParent.options.layoutRoot)&&(this.relativeTarget=this.relativeTargetOrigin=void 0),this.attemptToResolveRelativeTarget=!l;const f=Ve(),g=u?u.source:void 0,y=this.layout?this.layout.source:void 0,w=g!==y,x=this.getStack(),b=!x||x.members.length<=1,v=!!(w&&!b&&this.options.crossfade===!0&&!this.path.some(J3));this.animationProgress=0;let N;const I=c==null?void 0:c.interpolateProjection(o);this.mixTargetDelta=C=>{const R=C/1e3,O=I==null?void 0:I(R);O?(p.x.translate=O.x,p.x.scale=we(o.x.scale,1,R),p.x.origin=o.x.origin,p.x.originPoint=o.x.originPoint,p.y.translate=O.y,p.y.scale=we(o.y.scale,1,R),p.y.origin=o.y.origin,p.y.originPoint=o.y.originPoint):(G0(p.x,o.x,R),G0(p.y,o.y,R)),this.setTargetDelta(p),this.relativeTarget&&this.relativeTargetOrigin&&this.layout&&this.relativeParent&&this.relativeParent.layout&&(hc(f,this.layout.layoutBox,this.relativeParent.layout.layoutBox,this.options.layoutAnchor||void 0),Z3(this.relativeTarget,this.relativeTargetOrigin,f,R),N&&T3(this.relativeTarget,N)&&(this.isProjectionDirty=!1),N||(N=Ve()),an(N,this.relativeTarget)),w&&(this.animationValues=m,j3(m,d,this.latestValues,R,v,b)),O&&O.rotate!==void 0&&(this.animationValues||(this.animationValues=m),this.animationValues.pathRotation=O.rotate),this.root.scheduleUpdateProjection(),this.scheduleRender(),this.animationProgress=R},this.mixTargetDelta(this.options.layoutRoot?1e3:0)}startAnimation(o){var l,c,u;this.notifyListeners("animationStart"),(l=this.currentAnimation)==null||l.stop(),(u=(c=this.resumingFrom)==null?void 0:c.currentAnimation)==null||u.stop(),this.pendingAnimation&&(Ra(this.pendingAnimation),this.pendingAnimation=void 0),this.pendingAnimation=ke.update(()=>{Nl.hasAnimatedSinceResize=!0,this.motionValue||(this.motionValue=mr(0)),this.motionValue.jump(0,!1),this.currentAnimation=D3(this.motionValue,[0,1e3],{...o,velocity:0,isSync:!0,onUpdate:d=>{this.mixTargetDelta(d),o.onUpdate&&o.onUpdate(d)},onComplete:()=>{o.onComplete&&o.onComplete(),this.completeAnimation()}}),this.resumingFrom&&(this.resumingFrom.currentAnimation=this.currentAnimation),this.pendingAnimation=void 0})}completeAnimation(){this.resumingFrom&&(this.resumingFrom.currentAnimation=void 0,this.resumingFrom.preserveOpacity=void 0);const o=this.getStack();o&&o.exitAnimationComplete(),this.resumingFrom=this.currentAnimation=this.animationValues=void 0,this.notifyListeners("animationComplete")}finishAnimation(){this.currentAnimation&&(this.mixTargetDelta&&this.mixTargetDelta(z3),this.currentAnimation.stop()),this.completeAnimation()}applyTransformsToTarget(){const o=this.getLead();let{targetWithTransforms:l,target:c,layout:u,latestValues:d}=o;if(!(!l||!c||!u)){if(this!==o&&this.layout&&u&&t2(this.options.animationType,this.layout.layoutBox,u.layoutBox)){c=this.target||Ve();const m=xt(this.layout.layoutBox.x);c.x.min=o.target.x.min,c.x.max=c.x.min+m;const p=xt(this.layout.layoutBox.y);c.y.min=o.target.y.min,c.y.max=c.y.min+p}an(l,c),Cl(l,d),fs(this.projectionDeltaWithTransform,this.layoutCorrected,l,d)}}registerSharedNode(o,l){this.sharedNodes.has(o)||this.sharedNodes.set(o,new L3),this.sharedNodes.get(o).add(l);const u=l.options.initialPromotionConfig;l.promote({transition:u?u.transition:void 0,preserveFollowOpacity:u&&u.shouldPreserveFollowOpacity?u.shouldPreserveFollowOpacity(l):void 0})}isLead(){const o=this.getStack();return o?o.lead===this:!0}getLead(){var l;const{layoutId:o}=this.options;return o?((l=this.getStack())==null?void 0:l.lead)||this:this}getPrevLead(){var l;const{layoutId:o}=this.options;return o?(l=this.getStack())==null?void 0:l.prevLead:void 0}getStack(){const{layoutId:o}=this.options;if(o)return this.root.sharedNodes.get(o)}promote({needsReset:o,transition:l,preserveFollowOpacity:c}={}){const u=this.getStack();u&&u.promote(this,c),o&&(this.projectionDelta=void 0,this.needsReset=!0),l&&this.setOptions({transition:l})}relegate(){const o=this.getStack();return o?o.relegate(this):!1}resetSkewAndRotation(){const{visualElement:o}=this.options;if(!o)return;let l=!1;const{latestValues:c}=o;if((c.z||c.rotate||c.rotateX||c.rotateY||c.rotateZ||c.skewX||c.skewY)&&(l=!0),!l)return;const u={};c.z&&rd("z",o,u,this.animationValues);for(let d=0;d<id.length;d++)rd(`rotate${id[d]}`,o,u,this.animationValues),rd(`skew${id[d]}`,o,u,this.animationValues);o.render();for(const d in u)o.setStaticValue(d,u[d]),this.animationValues&&(this.animationValues[d]=u[d]);o.scheduleRender()}applyProjectionStyles(o,l){if(!this.instance||this.isSVG)return;if(!this.isVisible){o.visibility="hidden";return}const c=this.getTransformTemplate();if(this.needsReset){this.needsReset=!1,o.visibility="",o.opacity="",o.pointerEvents=El(l==null?void 0:l.pointerEvents)||"",o.transform=c?c(this.latestValues,""):"none";return}const u=this.getLead();if(!this.projectionDelta||!this.layout||!u.target){this.options.layoutId&&(o.opacity=this.latestValues.opacity!==void 0?this.latestValues.opacity:1,o.pointerEvents=El(l==null?void 0:l.pointerEvents)||""),this.hasProjected&&!Ga(this.latestValues)&&(o.transform=c?c({},""):"none",this.hasProjected=!1);return}o.visibility="";const d=u.animationValues||u.latestValues;this.applyTransformsToTarget();let m=S3(this.projectionDeltaWithTransform,this.treeScale,d);c&&(m=c(d,m)),o.transform=m;const{x:p,y:f}=this.projectionDelta;o.transformOrigin=`${p.origin*100}% ${f.origin*100}% 0`,u.animationValues?o.opacity=u===this?d.opacity??this.latestValues.opacity??1:this.preserveOpacity?this.latestValues.opacity:d.opacityExit:o.opacity=u===this?d.opacity!==void 0?d.opacity:"":d.opacityExit!==void 0?d.opacityExit:0;for(const g in Zm){if(d[g]===void 0)continue;const{correct:y,applyTo:w,isCSSVariable:x}=Zm[g],b=m==="none"?d[g]:y(d[g],u);if(w){const v=w.length;for(let N=0;N<v;N++)o[w[N]]=b}else x?this.options.visualElement.renderState.vars[g]=b:o[g]=b}this.options.layoutId&&(o.pointerEvents=u===this?El(l==null?void 0:l.pointerEvents)||"":"none")}clearSnapshot(){this.resumeFrom=this.snapshot=void 0}resetTree(){this.root.nodes.forEach(o=>{var l;return(l=o.currentAnimation)==null?void 0:l.stop()}),this.root.nodes.forEach(W0),this.root.sharedNodes.clear()}}}function B3(e){e.updateLayout()}function F3(e){var n;const t=((n=e.resumeFrom)==null?void 0:n.snapshot)||e.snapshot;if(e.isLead()&&e.layout&&t&&e.hasListeners("didUpdate")){const{layoutBox:a,measuredBox:r}=e.layout,{animationType:s}=e.options,o=t.source!==e.layout.source;if(s==="size")wn(m=>{const p=o?t.measuredBox[m]:t.layoutBox[m],f=xt(p);p.min=a[m].min,p.max=p.min+f});else if(s==="x"||s==="y"){const m=s==="x"?"y":"x";Jm(o?t.measuredBox[m]:t.layoutBox[m],a[m])}else t2(s,t.layoutBox,a)&&wn(m=>{const p=o?t.measuredBox[m]:t.layoutBox[m],f=xt(a[m]);p.max=p.min+f,e.relativeTarget&&!e.currentAnimation&&(e.isProjectionDirty=!0,e.relativeTarget[m].max=e.relativeTarget[m].min+f)});const l=Yi();fs(l,a,t.layoutBox);const c=Yi();o?fs(c,e.applyTransform(r,!0),t.measuredBox):fs(c,a,t.layoutBox);const u=!Kw(l);let d=!1;if(!e.resumeFrom){const m=e.getClosestProjectingParent();if(m&&!m.resumeFrom){const{snapshot:p,layout:f}=m;if(p&&f){const g=e.options.layoutAnchor||void 0,y=Ve();hc(y,t.layoutBox,p.layoutBox,g);const w=Ve();
492hc(w,a,f.layoutBox,g),Xw(y,w)||(d=!0),m.options.layoutRoot&&(e.relativeTarget=w,e.relativeTargetOrigin=y,e.relativeParent=m)}}}e.notifyListeners("didUpdate",{layout:a,snapshot:t,delta:c,layoutDelta:l,hasLayoutChanged:u,hasRelativeLayoutChanged:d})}else if(e.isLead()){const{onExitComplete:a}=e.options;a&&a()}e.options.transition=void 0}function H3(e){e.parent&&(e.isProjecting()||(e.isProjectionDirty=e.parent.isProjectionDirty),e.isSharedProjectionDirty||(e.isSharedProjectionDirty=!!(e.isProjectionDirty||e.parent.isProjectionDirty||e.parent.isSharedProjectionDirty)),e.isTransformDirty||(e.isTransformDirty=e.parent.isTransformDirty))}function U3(e){e.isProjectionDirty=e.isSharedProjectionDirty=e.isTransformDirty=!1}function V3(e){e.clearSnapshot()}function W0(e){e.clearMeasurements()}function W3(e){e.isLayoutDirty=!0,e.updateLayout()}function $0(e){e.isLayoutDirty=!1}function $3(e){e.isAnimationBlocked&&e.layout&&!e.isLayoutDirty&&(e.snapshot=e.layout,e.isLayoutDirty=!0)}function Y3(e){const{visualElement:t}=e.options;t&&t.getProps().onBeforeLayoutMeasure&&t.notify("BeforeLayoutMeasure"),e.resetTransform()}function Y0(e){e.finishAnimation(),e.targetDelta=e.relativeTarget=e.target=void 0,e.isProjectionDirty=!0}function G3(e){e.resolveTargetDelta()}function Q3(e){e.calcProjection()}function K3(e){e.resetSkewAndRotation()}function X3(e){e.removeLeadSnapshot()}function G0(e,t,n){e.translate=we(t.translate,0,n),e.scale=we(t.scale,1,n),e.origin=t.origin,e.originPoint=t.originPoint}function Q0(e,t,n,a){e.min=we(t.min,n.min,a),e.max=we(t.max,n.max,a)}function Z3(e,t,n,a){Q0(e.x,t.x,n.x,a),Q0(e.y,t.y,n.y,a)}function J3(e){return e.animationValues&&e.animationValues.opacityExit!==void 0}const ej={duration:.45,ease:[.4,0,.1,1]},K0=e=>typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().includes(e),X0=K0("applewebkit/")&&!K0("chrome/")?Math.round:Kt;function Z0(e){e.min=X0(e.min),e.max=X0(e.max)}function tj(e){Z0(e.x),Z0(e.y)}function t2(e,t,n){return e==="position"||e==="preserve-aspect"&&!k3(B0(t),B0(n),.2)}function nj(e){var t;return e!==e.root&&((t=e.scroll)==null?void 0:t.wasRoot)}const aj=e2({attachResizeListener:(e,t)=>Qs(e,"resize",t),measureScroll:()=>{var e,t;return{x:document.documentElement.scrollLeft||((e=document.body)==null?void 0:e.scrollLeft)||0,y:document.documentElement.scrollTop||((t=document.body)==null?void 0:t.scrollTop)||0}},checkIsScrollRoot:()=>!0}),sd={current:void 0},n2=e2({measureScroll:e=>({x:e.scrollLeft,y:e.scrollTop}),defaultParent:()=>{if(!sd.current){const e=new aj({});e.mount(window),e.setOptions({layoutScroll:!0}),sd.current=e}return sd.current},resetTransform:(e,t)=>{e.style.transform=t!==void 0?t:"none"},checkIsScrollRoot:e=>window.getComputedStyle(e).position==="fixed"}),Qh=T.createContext({transformPagePoint:e=>e,isStatic:!1,reducedMotion:"never"});function J0(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function ij(...e){return t=>{let n=!1;const a=e.map(r=>{const s=J0(r,t);return!n&&typeof s=="function"&&(n=!0),s});if(n)return()=>{for(let r=0;r<a.length;r++){const s=a[r];typeof s=="function"?s():J0(e[r],null)}}}}function rj(...e){return T.useCallback(ij(...e),e)}class sj extends T.Component{getSnapshotBeforeUpdate(t){const n=this.props.childRef.current;if(vl(n)&&t.isPresent&&!this.props.isPresent&&this.props.pop!==!1){const a=n.offsetParent,r=vl(a)&&a.offsetWidth||0,s=vl(a)&&a.offsetHeight||0,o=getComputedStyle(n),l=this.props.sizeRef.current;l.height=parseFloat(o.height),l.width=parseFloat(o.width),l.top=n.offsetTop,l.left=n.offsetLeft,l.right=r-l.width-l.left,l.bottom=s-l.height-l.top,l.direction=o.direction}return null}componentDidUpdate(){}render(){return this.props.children}}function oj({children:e,isPresent:t,anchorX:n,anchorY:a,root:r,pop:s}){var p;const o=T.useId(),l=T.useRef(null),c=T.useRef({width:0,height:0,top:0,left:0,right:0,bottom:0,direction:"ltr"}),{nonce:u}=T.useContext(Qh),d=s!==!1?((p=e.props)==null?void 0:p.ref)??(e==null?void 0:e.ref):void 0,m=rj(l,d);return T.useInsertionEffect(()=>{const{width:f,height:g,top:y,left:w,right:x,bottom:b,direction:v}=c.current;if(t||s===!1||!l.current||!f||!g)return;const N=v==="rtl",I=n==="left"?N?`right: ${x}`:`left: ${w}`:N?`left: ${w}`:`right: ${x}`,C=a==="bottom"?`bottom: ${b}`:`top: ${y}`;l.current.dataset.motionPopId=o;const R=document.createElement("style");u&&(R.nonce=u);const O=r??document.head;return O.appendChild(R),R.sheet&&R.sheet.insertRule(` 493 [data-motion-pop-id="${o}"] { 494 position: absolute !important; 495 width: ${f}px !important; 496 height: ${g}px !important; 497 ${I}px !important; 498 ${C}
498px !important; 499 } 500 `),()=>{var H;(H=l.current)==null||H.removeAttribute("data-motion-pop-id"),O.contains(R)&&O.removeChild(R)}},[t]),i.jsx(sj,{isPresent:t,childRef:l,sizeRef:c,pop:s,children:s===!1?e:T.cloneElement(e,{ref:m})})}const lj=({children:e,initial:t,isPresent:n,onExitComplete:a,custom:r,presenceAffectsLayout:s,mode:o,anchorX:l,anchorY:c,root:u})=>{const d=Ch(cj),m=T.useId(),p=T.useRef(n),f=T.useRef(a);Eh(()=>{p.current=n,f.current=a});let g=!0,y=T.useMemo(()=>(g=!1,{id:m,initial:t,isPresent:n,custom:r,onExitComplete:w=>{d.set(w,!0);for(const x of d.values())if(!x)return;a&&a()},register:w=>(d.set(w,!1),()=>{var x;d.delete(w),!p.current&&!d.size&&((x=f.current)==null||x.call(f))})}),[n,d,a]);return s&&g&&(y={...y}),T.useMemo(()=>{d.forEach((w,x)=>d.set(x,!1))},[n]),T.useEffect(()=>{!n&&!d.size&&a&&a()},[n]),e=i.jsx(oj,{pop:o==="popLayout",isPresent:n,anchorX:l,anchorY:c,root:u,children:e}),i.jsx(eu.Provider,{value:y,children:e})};function cj(){return new Map}function a2(e=!0){const t=T.useContext(eu);if(t===null)return[!0,null];const{isPresent:n,onExitComplete:a,register:r}=t,s=T.useId();T.useEffect(()=>{if(e)return r(s)},[e]);const o=T.useCallback(()=>e&&a&&a(s),[s,a,e]);return!n&&a?[!1,o]:[!0]}const Vo=e=>e.key||"";function ex(e){const t=[];return T.Children.forEach(e,n=>{T.isValidElement(n)&&t.push(n)}),t}const po=({children:e,custom:t,initial:n=!0,onExitComplete:a,presenceAffectsLayout:r=!0,mode:s="sync",propagate:o=!1,anchorX:l="left",anchorY:c="top",root:u})=>{const[d,m]=a2(o),p=T.useMemo(()=>ex(e),[e]),f=o&&!d?[]:p.map(Vo),g=T.useRef(!0),y=T.useRef(p),w=Ch(()=>new Map),x=T.useRef(new Set),[b,v]=T.useState(p),[N,I]=T.useState(p);Eh(()=>{g.current=!1,y.current=p;for(let O=0;O<N.length;O++){const H=Vo(N[O]);f.includes(H)?(w.delete(H),x.current.delete(H)):w.get(H)!==!0&&w.set(H,!1)}},[N,f.length,f.join("-")]);const C=[];if(p!==b){let O=[...p];for(let H=0;H<N.length;H++){const P=N[H],Y=Vo(P);f.includes(Y)||(O.splice(H,0,P),C.push(P))}return s==="wait"&&C.length&&(O=C),I(ex(O)),v(p),null}const{forceRender:R}=T.useContext(Ah);return i.jsx(i.Fragment,{children:N.map(O=>{const H=Vo(O),P=o&&!d?!1:p===N||f.includes(H),Y=()=>{if(x.current.has(H))return;if(w.has(H))x.current.add(H),w.set(H,!0);else return;let K=!0;w.forEach(ie=>{ie||(K=!1)}),K&&(R==null||R(),I(y.current),o&&(m==null||m()),a&&a())};return i.jsx(lj,{isPresent:P,initial:!g.current||n?void 0:!1,custom:t,presenceAffectsLayout:r,mode:s,root:u,onExitComplete:P?void 0:Y,anchorX:l,anchorY:c,children:O},H)})})},i2=T.createContext({strict:!1}),tx={animation:["animate","variants","whileHover","whileTap","exit","whileInView","whileFocus","whileDrag"],exit:["exit"],drag:["drag","dragControls"],focus:["whileFocus"],hover:["whileHover","onHoverStart","onHoverEnd"],tap:["whileTap","onTap","onTapStart","onTapCancel"],pan:["onPan","onPanStart","onPanSessionStart","onPanEnd"],inView:["whileInView","onViewportEnter","onViewportLeave"],layout:["layout","layoutId"]};let nx=!1;function uj(){if(nx)return;const e={};for(const t in tx)e[t]={isEnabled:n=>tx[t].some(a=>!!n[a])};Rw(e),nx=!0}function r2(){return uj(),G4()}function dj(e){const t=r2();for(const n in e)t[n]={...t[n],...e[n]};Rw(t)}const mj=new Set(["animate","exit","variants","initial","style","values","variants","transition","transformTemplate","custom","inherit","onBeforeLayoutMeasure","onAnimationStart","onAnimationComplete","onUpdate","onDragStart","onDrag","onDragEnd","onMeasureDragConstraints","onDirectionLock","onDragTransitionEnd","_dragX","_dragY","onHoverStart","onHoverEnd","onViewportEnter","onViewportLeave","globalTapTarget","propagate","ignoreStrict","viewport"]);function fc(e){return e.startsWith("while")||e.startsWith("drag")&&e!=="draggable"||e.startsWith("layout")||e.startsWith("onTap")||e.startsWith("onPan")||e.startsWith("onLayout")||mj.has(e)}let s2=e=>!fc(e);function pj(e){typeof e=="function"&&(s2=t=>t.startsWith("on")?!fc(t):e(t))}try{pj(require("@emotion/is-prop-valid").default)}catch{}function hj(e,t,n){const a={};for(const r in e)r==="values"&&typeof e.values=="object"||Je(e[r])||(s2(r)||n===!0&&fc(r)||!t&&!fc(r)||e.draggable&&r.startsWith("onDrag"))&&(a[r]=e[r]);return a}const ru=T.createContext({});function fj(e,t){if(iu(e)){const{initial:n,animate:a}=e;return{initial:n===!1||Gs(n)?n:void 0,animate:Gs(a)?a:void 0}}return e.inherit!==!1?t:{}}function gj(e){const{initial:t,animate:n}=fj(e,T.useContext(ru));return T.useMemo(()=>({initial:t,animate:n}),[ax(t),ax(n)])}function ax(e){return Array.isArray(e)?e.join(" "):e}const Kh=()=>({style:{},transform:{},transformOrigin:{},vars:{}});function o2(e,t,n){for(const a in t)!Je(t[a])&&!Fw(a,n)&&(e[a]=t[a])}function xj({transformTemplate:e},t){return T.useMemo(()=>{const n=Kh();return Yh(n,t,e),Object.assign({},n.vars,n.style)},[t])}function yj(e,t){const n=e.style||{},a={};return o2(a,n,e),Object.assign(a,xj(e,t)),a}function bj(e,t){const n={},a=yj(e,t);return e.drag&&e.dragListener!==!1&&(n.draggable=!1,a.userSelect=a.WebkitUserSelect=a.WebkitTouchCallout="none",a.touchAction=e.drag===!0?"none":`pan-${e.drag==="x"?"y":"x"}
500`),e.tabIndex===void 0&&(e.onTap||e.onTapStart||e.whileTap)&&(n.tabIndex=0),n.style=a,n}const l2=()=>({...Kh(),attrs:{}});function vj(e,t,n,a){const r=T.useMemo(()=>{const s=l2();return Hw(s,t,Vw(a),e.transformTemplate,e.style),{...s.attrs,style:{...s.style}}},[t]);if(e.style){const s={};o2(s,e.style,e),r.style={...s,...r.style}}return r}const wj=["animate","circle","defs","desc","ellipse","g","image","line","filter","marker","mask","metadata","path","pattern","polygon","polyline","rect","stop","switch","symbol","svg","text","tspan","use","view"];function Xh(e){return typeof e!="string"||e.includes("-")?!1:!!(wj.indexOf(e)>-1||/[A-Z]/u.test(e))}function kj(e,t,n,{latestValues:a},r,s=!1,o){const c=(o??Xh(e)?vj:bj)(t,a,r,e),u=hj(t,typeof e=="string",s),d=e!==T.Fragment?{...u,...c,ref:n}:{},{children:m}=t,p=T.useMemo(()=>Je(m)?m.get():m,[m]);return T.createElement(e,{...d,children:p})}function Aj({scrapeMotionValuesFromProps:e,createRenderState:t},n,a,r){return{latestValues:Cj(n,a,r,e),renderState:t()}}function Cj(e,t,n,a){const r={},s=a(e,{});for(const p in s)r[p]=El(s[p]);let{initial:o,animate:l}=e;const c=iu(e),u=Mw(e);t&&u&&!c&&e.inherit!==!1&&(o===void 0&&(o=t.initial),l===void 0&&(l=t.animate));let d=n?n.initial===!1:!1;d=d||o===!1;const m=d?l:o;if(m&&typeof m!="boolean"&&!au(m)){const p=Array.isArray(m)?m:[m];for(let f=0;f<p.length;f++){const g=qh(e,p[f]);if(g){const{transitionEnd:y,transition:w,...x}=g;for(const b in x){let v=x[b];if(Array.isArray(v)){const N=d?v.length-1:0;v=v[N]}v!==null&&(r[b]=v)}for(const b in y)r[b]=y[b]}}}return r}const c2=e=>(t,n)=>{const a=T.useContext(ru),r=T.useContext(eu),s=()=>Aj(e,t,a,r);return n?s():Ch(s)},Ej=c2({scrapeMotionValuesFromProps:Gh,createRenderState:Kh}),Nj=c2({scrapeMotionValuesFromProps:Ww,createRenderState:l2}),Tj=Symbol.for("motionComponentSymbol");function Sj(e,t,n){const a=T.useRef(n);T.useInsertionEffect(()=>{a.current=n});const r=T.useRef(null);return T.useCallback(s=>{var l;s&&((l=e.onMount)==null||l.call(e,s)),t&&(s?t.mount(s):t.unmount());const o=a.current;if(typeof o=="function")if(s){const c=o(s);typeof c=="function"&&(r.current=c)}else r.current?(r.current(),r.current=null):o(s);else o&&(o.current=s)},[t])}const u2=T.createContext({});function Pi(e){return e&&typeof e=="object"&&Object.prototype.hasOwnProperty.call(e,"current")}function Ij(e,t,n,a,r,s){var v,N;const{visualElement:o}=T.useContext(ru),l=T.useContext(i2),c=T.useContext(eu),u=T.useContext(Qh),d=u.reducedMotion,m=u.skipAnimations,p=T.useRef(null),f=T.useRef(!1);a=a||l.renderer,!p.current&&a&&(p.current=a(e,{visualState:t,parent:o,props:n,presenceContext:c,blockInitialAnimation:c?c.initial===!1:!1,reducedMotionConfig:d,skipAnimations:m,isSVG:s}),f.current&&p.current&&(p.current.manuallyAnimateOnMount=!0));const g=p.current,y=T.useContext(u2);g&&!g.projection&&r&&(g.type==="html"||g.type==="svg")&&jj(p.current,n,r,y);const w=T.useRef(!1);T.useInsertionEffect(()=>{g&&w.current&&g.update(n,c)});const x=n[vw],b=T.useRef(!!x&&typeof window<"u"&&!((v=window.MotionHandoffIsComplete)!=null&&v.call(window,x))&&((N=window.MotionHasOptimisedAnimation)==null?void 0:N.call(window,x)));return Eh(()=>{f.current=!0,g&&(w.current=!0,window.MotionIsMounted=!0,g.updateFeatures(),g.scheduleRenderMicrotask(),b.current&&g.animationState&&g.animationState.animateChanges())}),T.useEffect(()=>{g&&(!b.current&&g.animationState&&g.animationState.animateChanges(),b.current&&(queueMicrotask(()=>{var I;(I=window.MotionHandoffMarkAsComplete)==null||I.call(window,x)}),b.current=!1),g.enteringChildren=void 0)}),g}function jj(e,t,n,a){const{layoutId:r,layout:s,drag:o,dragConstraints:l,layoutScroll:c,layoutRoot:u,layoutAnchor:d,layoutCrossfade:m}=t;e.projection=new n(e.latestValues,t["data-framer-portal-id"]?void 0:d2(e.parent)),e.projection.setOptions({layoutId:r,layout:s,alwaysMeasureLayout:!!o||l&&Pi(l),visualElement:e,animationType:typeof s=="string"?s:"both",initialPromotionConfig:a,crossfade:m,layoutScroll:c,layoutRoot:u,layoutAnchor:d})}function d2(e){if(e)return e.options.allowProjection!==!1?e.projection:d2(e.parent)}function od(e,{forwardMotionProps:t=!1,type:n}={},a,r){a&&dj(a);const s=n?n==="svg":Xh(e),o=s?Nj:Ej;function l(u,d){let m;const p={...T.useContext(Qh),...u,layoutId:Pj(u)},{isStatic:f}=p,g=gj(u),y=o(u,f);if(!f&&typeof window<"u"){Mj();const w=Dj(p);m=w.MeasureLayout,g.visualElement=Ij(e,y,p,r,w.ProjectionNode,s)}return i.jsxs(ru.Provider,{value:g,children:[m&&g.visualElement?i.jsx(m,{visualElement:g.visualElement,...p}):null,kj(e,u,Sj(y,g.visualElement,d),y,f,t,s)]})}l.displayName=`motion.${typeof e=="string"?e:`create(${e.displayName??e.name??""})`}`;const c=T.forwardRef(l);return c[Tj]=e,c}function Pj({layoutId:e}){const t=T.useContext(Ah).id;return t&&e!==void 0?t+"-"+e:e}function Mj(e,t){T.useContext(i2).strict}function Dj(e){const t=r2(),{drag:n,layout:a}=t;if(!n&&!a)return{};const r={...n,...a};return{MeasureLayout:n!=null&&n.isEnabled(e)||a!=null&&a.isEnabled(e)?r.MeasureLayout:void 0,ProjectionNode:r.ProjectionNode}}
vendor: 18,161 bytes, line 500
500function Rj(e,t){if(typeof Proxy>"u")return od;const n=new Map,a=(s,o)=>od(s,o,e,t),r=(s,o)=>a(s,o);return new Proxy(r,{get:(s,o)=>o==="create"?a:(n.has(o)||n.set(o,od(o,void 0,e,t)),n.get(o))})}const Oj=(e,t)=>t.isSVG??Xh(e)?new d3(t):new r3(t,{allowProjection:e!==T.Fragment});class _j extends Ba{constructor(t){super(t),t.animationState||(t.animationState=g3(t))}updateAnimationControlsSubscription(){const{animate:t}=this.node.getProps();au(t)&&(this.unmountControls=t.subscribe(this.node))}mount(){this.updateAnimationControlsSubscription()}update(){const{animate:t}=this.node.getProps(),{animate:n}=this.node.prevProps||{};t!==n&&this.updateAnimationControlsSubscription()}unmount(){var t;this.node.animationState.reset(),(t=this.unmountControls)==null||t.call(this)}}let Lj=0;class zj extends Ba{constructor(){super(...arguments),this.id=Lj++,this.isExitComplete=!1}update(){var s;if(!this.node.presenceContext)return;const{isPresent:t,onExitComplete:n}=this.node.presenceContext,{isPresent:a}=this.node.prevPresenceContext||{};if(!this.node.animationState||t===a)return;if(t&&a===!1){if(this.isExitComplete){const{initial:o,custom:l}=this.node.getProps();if(typeof o=="string"||typeof o=="object"&&o!==null&&!Array.isArray(o)){const c=oi(this.node,o,l);if(c){const{transition:u,transitionEnd:d,...m}=c;for(const p in m)(s=this.node.getValue(p))==null||s.jump(m[p])}}this.node.animationState.reset(),this.node.animationState.animateChanges()}else this.node.animationState.setActive("exit",!1);this.isExitComplete=!1;return}const r=this.node.animationState.setActive("exit",!t);n&&!t&&r.then(()=>{this.isExitComplete=!0,n(this.id)})}mount(){const{register:t,onExitComplete:n}=this.node.presenceContext||{};n&&n(this.id),t&&(this.unmount=t(this.id))}unmount(){}}const qj={animation:{Feature:_j},exit:{Feature:zj}};function ho(e){return{point:{x:e.pageX,y:e.pageY}}}const Bj=e=>t=>Uh(t)&&e(t,ho(t));function gs(e,t,n,a){return Qs(e,t,Bj(n),a)}const m2=({current:e})=>e?e.ownerDocument.defaultView:null,ix=(e,t)=>Math.abs(e-t);function Fj(e,t){const n=ix(e.x,t.x),a=ix(e.y,t.y);return Math.sqrt(n**2+a**2)}const rx=new Set(["auto","scroll"]);class p2{constructor(t,n,{transformPagePoint:a,contextWindow:r=window,dragSnapToOrigin:s=!1,distanceThreshold:o=3,element:l}={}){if(this.startEvent=null,this.lastMoveEvent=null,this.lastMoveEventInfo=null,this.lastRawMoveEventInfo=null,this.handlers={},this.contextWindow=window,this.scrollPositions=new Map,this.removeScrollListeners=null,this.onElementScroll=g=>{this.handleScroll(g.target)},this.onWindowScroll=()=>{this.handleScroll(window)},this.updatePoint=()=>{if(!(this.lastMoveEvent&&this.lastMoveEventInfo))return;this.lastRawMoveEventInfo&&(this.lastMoveEventInfo=Wo(this.lastRawMoveEventInfo,this.transformPagePoint));const g=ld(this.lastMoveEventInfo,this.history),y=this.startEvent!==null,w=Fj(g.offset,{x:0,y:0})>=this.distanceThreshold;if(!y&&!w)return;const{point:x}=g,{timestamp:b}=Ze;this.history.push({...x,timestamp:b});const{onStart:v,onMove:N}=this.handlers;y||(v&&v(this.lastMoveEvent,g),this.startEvent=this.lastMoveEvent),N&&N(this.lastMoveEvent,g)},this.handlePointerMove=(g,y)=>{this.lastMoveEvent=g,this.lastRawMoveEventInfo=y,this.lastMoveEventInfo=Wo(y,this.transformPagePoint),ke.update(this.updatePoint,!0)},this.handlePointerUp=(g,y)=>{this.end();const{onEnd:w,onSessionEnd:x,resumeAnimation:b}=this.handlers;if((this.dragSnapToOrigin||!this.startEvent)&&b&&b(),!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const v=ld(g.type==="pointercancel"?this.lastMoveEventInfo:Wo(y,this.transformPagePoint),this.history);this.startEvent&&w&&w(g,v),x&&x(g,v)},!Uh(t))return;this.dragSnapToOrigin=s,this.handlers=n,this.transformPagePoint=a,this.distanceThreshold=o,this.contextWindow=r||window;const c=ho(t),u=Wo(c,this.transformPagePoint),{point:d}=u,{timestamp:m}=Ze;this.history=[{...d,timestamp:m}];const{onSessionStart:p}=n;p&&p(t,ld(u,this.history));const f={passive:!0,capture:!0};this.removeListeners=co(gs(this.contextWindow,"pointermove",this.handlePointerMove,f),gs(this.contextWindow,"pointerup",this.handlePointerUp,f),gs(this.contextWindow,"pointercancel",this.handlePointerUp,f)),l&&this.startScrollTracking(l)}startScrollTracking(t){let n=t.parentElement;for(;n;){const a=getComputedStyle(n);(rx.has(a.overflowX)||rx.has(a.overflowY))&&this.scrollPositions.set(n,{x:n.scrollLeft,y:n.scrollTop}),n=n.parentElement}this.scrollPositions.set(window,{x:window.scrollX,y:window.scrollY}),window.addEventListener("scroll",this.onElementScroll,{capture:!0}),window.addEventListener("scroll",this.onWindowScroll),this.removeScrollListeners=()=>{window.removeEventListener("scroll",this.onElementScroll,{capture:!0}),window.removeEventListener("scroll",this.onWindowScroll)}}handleScroll(t){const n=this.scrollPositions.get(t);if(!n)return;const a=t===window,r=a?{x:window.scrollX,y:window.scrollY}:{x:t.scrollLeft,y:t.scrollTop},s={x:r.x-n.x,y:r.y-n.y};s.x===0&&s.y===0||(a?this.lastMoveEventInfo&&(this.lastMoveEventInfo.point.x+=s.x,this.lastMoveEventInfo.point.y+=s.y):this.history.length>0&&(this.history[0].x-=s.x,this.history[0].y-=s.y),this.scrollPositions.set(t,r),ke.update(this.updatePoint,!0))}updateHandlers(t){this.handlers=t}end(){this.removeListeners&&this.removeListeners(),this.removeScrollListeners&&this.removeScrollListeners(),this.scrollPositions.clear(),Ra(this.updatePoint)}}function Wo(e,t){return t?{point:t(e.point)}:e}function sx(e,t){return{x:e.x-t.x,y:e.y-t.y}}function ld({point:e},t){return{point:e,delta:sx(e,h2(t)),offset:sx(e,Hj(t)),velocity:Uj(t,.1)}}function Hj(e){return e[0]}function h2(e){return e[e.length-1]}function Uj(e,t){if(e.length<2)return{x:0,y:0};let n=e.length-1,a=null;const r=h2(e);for(;n>=0&&(a=e[n],!(r.timestamp-a.timestamp>_t(t)));)n--;if(!a)return{x:0,y:0};a===e[0]&&e.length>2&&r.timestamp-a.timestamp>_t(t)*2&&(a=e[1]);const s=Gt(r.timestamp-a.timestamp);if(s===0)return{x:0,y:0};const o={x:(r.x-a.x)/s,y:(r.y-a.y)/s};return o.x===1/0&&(o.x=0),o.y===1/0&&(o.y=0),o}function Vj(e,{min:t,max:n},a){return t!==void 0&&e<t?e=a?we(t,e,a.min):Math.max(e,t):n!==void 0&&e>n&&(e=a?we(n,e,a.max):Math.min(e,n)),e}function ox(e,t,n){return{min:t!==void 0?e.min+t:void 0,max:n!==void 0?e.max+n-(e.max-e.min):void 0}}function Wj(e,{top:t,left:n,bottom:a,right:r}){return{x:ox(e.x,n,r),y:ox(e.y,t,a)}}function lx(e,t){let n=t.min-e.min,a=t.max-e.max;return t.max-t.min<e.max-e.min&&([n,a]=[a,n]),{min:n,max:a}}function $j(e,t){return{x:lx(e.x,t.x),y:lx(e.y,t.y)}}function Yj(e,t){let n=.5;const a=xt(e),r=xt(t);return r>a?n=$s(t.min,t.max-a,e.min):a>r&&(n=$s(e.min,e.max-r,t.min)),Mn(0,1,n)}function Gj(e,t){const n={};return t.min!==void 0&&(n.min=t.min-e.min),t.max!==void 0&&(n.max=t.max-e.min),n}const ep=.35;function Qj(e=ep){return e===!1?e=0:e===!0&&(e=ep),{x:cx(e,"left","right"),y:cx(e,"top","bottom")}}function cx(e,t,n){return{min:ux(e,t),max:ux(e,n)}}function ux(e,t){return typeof e=="number"?e:e[t]||0}const Kj=new WeakMap;class Xj{constructor(t){this.openDragLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=Ve(),this.latestPointerEvent=null,this.latestPanInfo=null,this.visualElement=t}start(t,{snapToCursor:n=!1,distanceThreshold:a}={}){const{presenceContext:r}=this.visualElement;if(r&&r.isPresent===!1)return;const s=m=>{n&&this.snapToCursor(ho(m).point),this.stopAnimation()},o=(m,p)=>{const{drag:f,dragPropagation:g,onDragStart:y}=this.getProps();if(f&&!g&&(this.openDragLock&&this.openDragLock(),this.openDragLock=C4(f),!this.openDragLock))return;this.latestPointerEvent=m,this.latestPanInfo=p,this.isDragging=!0,this.currentDirection=null,this.resolveConstraints(),this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!0,this.visualElement.projection.target=void 0),wn(x=>{let b=this.getAxisMotionValue(x).get()||0;if(Sn.test(b)){const{projection:v}=this.visualElement;if(v&&v.layout){const N=v.layout.layoutBox[x];N&&(b=xt(N)*(parseFloat(b)/100))}}this.originPoint[x]=b}),y&&ke.update(()=>y(m,p),!1,!0),Vm(this.visualElement,"transform");const{animationState:w}=this.visualElement;w&&w.setActive("whileDrag",!0)},l=(m,p)=>{this.latestPointerEvent=m,this.latestPanInfo=p;const{dragPropagation:f,dragDirectionLock:g,onDirectionLock:y,onDrag:w}=this.getProps();if(!f&&!this.openDragLock)return;const{offset:x}=p;if(g&&this.currentDirection===null){this.currentDirection=Jj(x),this.currentDirection!==null&&y&&y(this.currentDirection);return}this.updateAxis("x",p.point,x),this.updateAxis("y",p.point,x),this.visualElement.render(),w&&ke.update(()=>w(m,p),!1,!0)},c=(m,p)=>{this.latestPointerEvent=m,this.latestPanInfo=p,this.stop(m,p),this.latestPointerEvent=null,this.latestPanInfo=null},u=()=>{const{dragSnapToOrigin:m}=this.getProps();(m||this.constraints)&&this.startAnimation({x:0,y:0})},{dragSnapToOrigin:d}=this.getProps();this.panSession=new p2(t,{onSessionStart:s,onStart:o,onMove:l,onSessionEnd:c,resumeAnimation:u},{transformPagePoint:this.visualElement.getTransformPagePoint(),dragSnapToOrigin:d,distanceThreshold:a,contextWindow:m2(this.visualElement),element:this.visualElement.current})}stop(t,n){const a=t||this.latestPointerEvent,r=n||this.latestPanInfo,s=this.isDragging;if(this.cancel(),!s||!r||!a)return;const{velocity:o}=r;this.startAnimation(o);const{onDragEnd:l}=this.getProps();l&&ke.postRender(()=>l(a,r))}cancel(){this.isDragging=!1;const{projection:t,animationState:n}=this.visualElement;t&&(t.isAnimationBlocked=!1),this.endPanSession();const{dragPropagation:a}=this.getProps();!a&&this.openDragLock&&(this.openDragLock(),this.openDragLock=null),n&&n.setActive("whileDrag",!1)}endPanSession(){this.panSession&&this.panSession.end(),this.panSession=void 0}updateAxis(t,n,a){const{drag:r}=this.getProps();if(!a||!$o(t,r,this.currentDirection))return;const s=this.getAxisMotionValue(t);let o=this.originPoint[t]+a[t];this.constraints&&this.constraints[t]&&(o=Vj(o,this.constraints[t],this.elastic[t])),s.set(o)}resolveConstraints(){var s;const{dragConstraints:t,dragElastic:n}=this.getProps(),a=this.visualElement.projection&&!this.visualElement.projection.layout?this.visualElement.projection.measure(!1):(s=this.visualElement.projection)==null?void 0:s.layout,r=this.constraints;t&&Pi(t)?this.constraints||(this.constraints=this.resolveRefConstraints()):t&&a?this.constraints=Wj(a.layoutBox,t):this.constraints=!1,this.elastic=Qj(n),r!==this.constraints&&!Pi(t)&&a&&this.constraints&&!this.hasMutatedConstraints&&wn(o=>{this.constraints!==!1&&this.getAxisMotionValue(o)&&(this.constraints[o]=Gj(a.layoutBox[o],this.constraints[o]))})}resolveRefConstraints(){const{dragConstraints:t,onMeasureDragConstraints:n}=this.getProps();if(!t||!Pi(t))return!1;const a=t.current,{projection:r}=this.visualElement;if(!r||!r.layout)return!1;r.root&&(r.root.scroll=void 0,r.root.updateScroll());const s=J4(a,r.root,this.visualElement.getTransformPagePoint());let o=$j(r.layout.layoutBox,s);if(n){const l=n(K4(o));this.hasMutatedConstraints=!!l,l&&(o=_w(l))}return o}startAnimation(t){const{drag:n,dragMomentum:a,dragElastic:r,dragTransition:s,dragSnapToOrigin:o,onDragTransitionEnd:l}=this.getProps(),c=this.constraints||{},u=wn(d=>{if(!$o(d,n,this.currentDirection))return;let m=c&&c[d]||{};(o===!0||o===d)&&(m={min:0,max:0});const p=r?200:1e6,f=r?40:1e7,g={type:"inertia",velocity:a?t[d]:0,bounceStiffness:p,bounceDamping:f,timeConstant:750,restDelta:1,restSpeed:10,...s,...m};return this.startAxisValueAnimation(d,g)});return Promise.all(u).then(l)}startAxisValueAnimation(t,n){const a=this.getAxisMotionValue(t);return Vm(this.visualElement,t),a.start(zh(t,a,0,n,this.visualElement,!1))}stopAnimation(){wn(t=>this.getAxisMotionValue(t).stop())}getAxisMotionValue(t){const n=`_drag${t.toUpperCase()}`,r=this.visualElement.getProps()[n];return r||this.visualElement.getValue(t,this.visualElement.latestValues[t]??0)}snapToCursor(t){wn(n=>{const{drag:a}=this.getProps();if(!$o(n,a,this.currentDirection))return;const{projection:r}=this.visualElement,s=this.getAxisMotionValue(n);if(r&&r.layout){const{min:o,max:l}=r.layout.layoutBox[n],c=s.get()||0;s.set(t[n]-we(o,l,.5)+c)}})}scalePositionWithinConstraints(){if(!this.visualElement.current)return;const{drag:t,dragConstraints:n}=this.getProps(),{projection:a}=this.visualElement;if(!Pi(n)||!a||!this.constraints)return;this.stopAnimation();const r={x:0,y:0};wn(o=>{const l=this.getAxisMotionValue(o);if(l&&this.constraints!==!1){const c=l.get();r[o]=Yj({min:c,max:c},this.constraints[o])}});const{transformTemplate:s}=this.visualElement.getProps();this.visualElement.current.style.transform=s?s({},""):"none",a.root&&a.root.updateScroll(),a.updateLayout(),this.constraints=!1,this.resolveConstraints(),wn(o=>{if(!$o(o,t,null))return;const l=this.getAxisMotionValue(o),{min:c,max:u}=this.constraints[o];l.set(we(c,u,r[o]))}),this.visualElement.render()}addListeners(){if(!this.visualElement.current)return;Kj.set(this.visualElement,this);const t=this.visualElement.current,n=gs(t,"pointerdown",u=>{const{drag:d,dragListener:m=!0}=this.getProps(),p=u.target,f=p!==t&&j4(p);d&&m&&!f&&this.start(u)});let a;const r=()=>{const{dragConstraints:u}=this.getProps();Pi(u)&&u.current&&(this.constraints=this.resolveRefConstraints(),a||(a=Zj(t,u.current,()=>this.scalePositionWithinConstraints())))},{projection:s}=this.visualElement,o=s.addEventListener("measure",r);s&&!s.layout&&(s.root&&s.root.updateScroll(),s.updateLayout()),ke.read(r);const l=Qs(window,"resize",()=>this.scalePositionWithinConstraints()),c=s.addEventListener("didUpdate",({delta:u,hasLayoutChanged:d})=>{this.isDragging&&d&&(wn(m=>{const p=this.getAxisMotionValue(m);p&&(this.originPoint[m]+=u[m].translate,p.set(p.get()+u[m].translate))}),this.visualElement.render())});return()=>{l(),n(),o(),c&&c(),a&&a()}}getProps(){const t=this.visualElement.getProps(),{drag:n=!1,dragDirectionLock:a=!1,dragPropagation:r=!1,dragConstraints:s=!1,dragElastic:o=ep,dragMomentum:l=!0}=t;return{...t,drag:n,dragDirectionLock:a,dragPropagation:r,dragConstraints:s,dragElastic:o,dragMomentum:l}}}function dx(e){let t=!0;return()=>{if(t){t=!1;return}e()}}function Zj(e,t,n){const a=y0(e,dx(n)),r=y0(t,dx(n));return()=>{a(),r()}}function $o(e,t,n){return(t===!0||t===e)&&(n===null||n===e)}function Jj(e,t=10){let n=null;return Math.abs(e.y)>t?n="y":Math.abs(e.x)>t&&(n="x"),n}class e5 extends Ba{constructor(t){super(t),this.removeGroupControls=Kt,this.removeListeners=Kt,this.controls=new Xj(t)}mount(){const{dragControls:t}=this.node.getProps();t&&(this.removeGroupControls=t.subscribe(this.controls)),this.removeListeners=this.controls.addListeners()||Kt}update(){const{dragControls:t}=this.node.getProps(),{dragControls:n}=this.node.prevProps||{};t!==n&&(this.removeGroupControls(),t&&(this.removeGroupControls=t.subscribe(this.controls)))}unmount(){this.removeGroupControls(),this.removeListeners(),this.controls.isDragging||this.controls.endPanSession()}}const cd=e=>(t,n)=>{e&&ke.update(()=>e(t,n),!1,!0)};class t5 extends Ba{constructor(){super(...arguments),this.removePointerDownListener=Kt}onPointerDown(t){this.session=new p2(t,this.createPanHandlers(),{transformPagePoint:this.node.getTransformPagePoint(),contextWindow:m2(this.node)})}createPanHandlers(){const{onPanSessionStart:t,onPanStart:n,onPan:a,onPanEnd:r}=this.node.getProps();return{onSessionStart:cd(t),onStart:cd(n),onMove:cd(a),onEnd:(s,o)=>{delete this.session,r&&ke.postRender(()=>r(s,o))}}}mount(){this.removePointerDownListener=gs(this.node.current,"pointerdown",t=>this.onPointerDown(t))}update(){this.session&&this.session.updateHandlers(this.createPanHandlers())}unmount(){this.removePointerDownListener(),this.session&&this.session.end()}}let ud=!1;class n5 extends T.Component{componentDidMount(){const{visualElement:t,layoutGroup:n,switchLayoutGroup:a,layoutId:r}=this.props,{projection:s}=t;s&&(n.group&&n.group.add(s),a&&a.register&&r&&a.register(s),ud&&s.root.didUpdate(),s.addEventListener("animationComplete",()=>{this.safeToRemove()}),s.setOptions({...s.options,layoutDependency:this.props.layoutDependency,onExitComplete:()=>this.safeToRemove()})),Nl.hasEverUpdated=!0}getSnapshotBeforeUpdate(t){const{layoutDependency:n,visualElement:a,drag:r,isPresent:s}=this.props,{projection:o}=a;return o&&(o.isPresent=s,t.layoutDependency!==n&&o.setOptions({...o.options,layoutDependency:n}),ud=!0,r||t.layoutDependency!==n||n===void 0||t.isPresent!==s?o.willUpdate():this.safeToRemove(),t.isPresent!==s&&(s?o.promote():o.relegate()||ke.postRender(()=>{const l=o.getStack();(!l||!l.members.length)&&this.safeToRemove()}))),null}componentDidUpdate(){const{visualElement:t,layoutAnchor:n}=this.props,{projection:a}=t;a&&(a.options.layoutAnchor=n,a.root.didUpdate(),Hh.postRender(()=>{!a.currentAnimation&&a.isLead()&&this.safeToRemove()}))}componentWillUnmount(){const{visualElement:t,layoutGroup:n,switchLayoutGroup:a}=this.props,{projection:r}=t;ud=!0,r&&(r.scheduleCheckAfterUnmount(),n&&n.group&&n.group.remove(r),a&&a.deregister&&a.deregister(r))}safeToRemove(){const{safeToRemove:t}=this.props;t&&t()}render(){return null}}function f2(e){const[t,n]=a2(),a=T.useContext(Ah);return i.jsx(n5,{...e,layoutGroup:a,switchLayoutGroup:T.useContext(u2),isPresent:t,safeToRemove:n})}const a5={pan:{Feature:t5},drag:{Feature:e5,ProjectionNode:n2,MeasureLayout:f2}};function mx(e,t,n){const{props:a}=e;e.animationState&&a.whileHover&&e.animationState.setActive("whileHover",n==="Start");const r="onHover"+n,s=a[r];s&&ke.postRender(()=>s(t,ho(t)))}class i5 extends Ba{mount(){const{current:t}=this.node;t&&(this.unmount=N4(t,(n,a)=>(mx(this.node,a,"Start"),r=>mx(this.node,r,"End"))))}unmount(){}}class r5 extends Ba{constructor(){super(...arguments),this.isActive=!1}onFocus(){let t=!1;try{t=this.node.current.matches(":focus-visible")}catch{t=!0}!t||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!0),this.isActive=!0)}onBlur(){!this.isActive||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!1),this.isActive=!1)}mount(){this.unmount=co(Qs(this.node.current,"focus",()=>this.onFocus()),Qs(this.node.current,"blur",()=>this.onBlur()))}unmount(){}}
500function px(e,t,n){const{props:a}=e;if(e.current instanceof HTMLButtonElement&&e.current.disabled)return;e.animationState&&a.whileTap&&e.animationState.setActive("whileTap",n==="Start");const r="onTap"+(n==="End"?"":n),s=a[r];s&&ke.postRender(()=>s(t,ho(t)))}class s5 extends Ba{mount(){const{current:t}=this.node;if(!t)return;const{globalTapTarget:n,propagate:a}=this.node.props;this.unmount=M4(t,(r,s)=>(px(this.node,s,"Start"),(o,{success:l})=>px(this.node,o,l?"End":"Cancel")),{useGlobalTarget:n,stopPropagation:(a==null?void 0:a.tap)===!1})}unmount(){}}const tp=new WeakMap,dd=new WeakMap,o5=e=>{const t=tp.get(e.target);t&&t(e)},l5=e=>{e.forEach(o5)};function c5({root:e,...t}){const n=e||document;dd.has(n)||dd.set(n,{});const a=dd.get(n),r=JSON.stringify(t);return a[r]||(a[r]=new IntersectionObserver(l5,{root:e,...t})),a[r]}function u5(e,t,n){const a=c5(t);return tp.set(e,n),a.observe(e),()=>{tp.delete(e),a.unobserve(e)}}const d5={some:0,all:1};class m5 extends Ba{constructor(){super(...arguments),this.hasEnteredView=!1,this.isInView=!1}startObserver(){var c;(c=this.stopObserver)==null||c.call(this);const{viewport:t={}}=this.node.getProps(),{root:n,margin:a,amount:r="some",once:s}=t,o={root:n?n.current:void 0,rootMargin:a,threshold:typeof r=="number"?r:d5[r]},l=u=>{const{isIntersecting:d}=u;if(this.isInView===d||(this.isInView=d,s&&!d&&this.hasEnteredView))return;d&&(this.hasEnteredView=!0),this.node.animationState&&this.node.animationState.setActive("whileInView",d);const{onViewportEnter:m,onViewportLeave:p}=this.node.getProps(),f=d?m:p;f&&f(u)};this.stopObserver=u5(this.node.current,o,l)}mount(){this.startObserver()}update(){if(typeof IntersectionObserver>"u")return;const{props:t,prevProps:n}=this.node;["amount","margin","root"].some(p5(t,n))&&this.startObserver()}unmount(){var t;(t=this.stopObserver)==null||t.call(this),this.hasEnteredView=!1,this.isInView=!1}}function p5({viewport:e={}},{viewport:t={}}={}){return n=>e[n]!==t[n]}const h5={inView:{Feature:m5},tap:{Feature:s5},focus:{Feature:r5},hover:{Feature:i5}},f5={layout:{ProjectionNode:n2,MeasureLayout:f2}},g5={...qj,...h5,...a5,...f5},M=Rj(g5,Oj),g2=({title:e,excerpt:t,author:n,date:a,slug:r,readTime:s="5 min read",delay:o=0})=>i.jsx(M.article,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},transition:{duration:.6,delay:o},viewport:{once:!0},className:"group",children:i.jsx(Ne,{to:`/blog/${r}`,className:"block h-full",children:i.jsxs("div",{className:"glass-card h-full p-6 relative overflow-hidden transition-all duration-300 hover:bg-dark-card/80",children:[i.jsx("div",{className:"absolute top-0 right-0 w-24 h-24 opacity-10",children:i.jsxs("svg",{viewBox:"0 0 100 100",className:"w-full h-full",children:[i.jsx("path",{d:"M 80 20 Q 80 80, 20 80",stroke:"currentColor",strokeWidth:"3",fill:"none",className:"text-accent-cyan"}),i.jsx("circle",{cx:"80",cy:"20",r:"4",fill:"currentColor",className:"text-accent-cyan"}),i.jsx("circle",{cx:"20",cy:"80",r:"4",fill:"currentColor",className:"text-accent-purple"})]})}),i.jsxs("div",{className:"relative z-10",children:[i.jsxs("div",{className:"flex items-center space-x-4 text-sm text-gray-500 mb-3",children:[i.jsxs("div",{className:"flex items-center",children:[i.jsx(qt,{className:"h-3.5 w-3.5 mr-1"}),i.jsx("time",{dateTime:a,children:new Date(a).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})})]}),i.jsxs("div",{className:"flex items-center",children:[i.jsx(za,{className:"h-3.5 w-3.5 mr-1"}),i.jsx("span",{children:s})]})]}),i.jsx("h3",{className:"text-xl font-semibold mb-3 text-white group-hover:text-accent-cyan transition-colors",children:e}),i.jsx("p",{className:"text-gray-400 mb-4 line-clamp-2",children:t}),i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsxs("span",{className:"text-sm text-gray-500",children:["By ",n]}),i.jsxs("div",{className:"flex items-center text-accent-cyan opacity-0 group-hover:opacity-100 transition-opacity",children:[i.jsx("span",{className:"text-sm mr-1",children:"Read more"}),i.jsx(ut,{className:"h-4 w-4"})]})]})]}),i.jsx("div",{className:"absolute bottom-0 left-0 right-0 h-0.5 bg-gradient-to-r from-transparent via-accent-cyan/20 to-transparent opacity-0 group-hover:opacity-100 transition-opacity"})]})})}),pe=({className:e="",opacity:t=.03})=>i.jsx("div",{className:`absolute inset-0 overflow-hidden pointer-events-none ${e}`,children:i.jsxs("svg",{className:"absolute inset-0 w-full h-full",style:{opacity:t},children:[i.jsx("defs",{children:i.jsxs("pattern",{id:"cable-pattern",x:"0",y:"0",width:"200",height:"200",patternUnits:"userSpaceOnUse",children:[i.jsx("path",{d:"M 20 20 Q 80 20, 80 60 T 20 100",stroke:"#4ECDC4",strokeWidth:"2",fill:"none",opacity:"0.5"}),i.jsx("circle",{cx:"20",cy:"20",r:"4",fill:"#4ECDC4",opacity:"0.3"}),i.jsx("circle",{cx:"80",cy:"60",r:"4",fill:"#7C8DB5",opacity:"0.3"}),i.jsx("circle",{cx:"20",cy:"100",r:"4",fill:"#4ECDC4",opacity:"0.3"}),i.jsx("path",{d:"M 120 40 Q 180 40, 180 80 T 120 120",stroke:"#7C8DB5",strokeWidth:"2",fill:"none",opacity:"0.3"}),i.jsx("circle",{cx:"120",cy:"40",r:"4",fill:"#7C8DB5",opacity:"0.3"}),i.jsx("circle",{cx:"180",cy:"80",r:"4",fill:"#4ECDC4",opacity:"0.3"}),i.jsx("circle",{cx:"120",cy:"120",r:"4",fill:"#7C8DB5",opacity:"0.3"})]})}),i.jsx("rect",{width:"100%",height:"100%",fill:"url(#cable-pattern)"})]})}),it=({title:e="Selent - AI-Powered Network Operations Management for Cisco Meraki",de
500scription:t="Streamline your network management across platforms with intelligent automation and enterprise-grade security. Official Cisco Meraki Technology Partner.",keywords:n="network management, cisco meraki, configuration backup, network automation, AI network management, enterprise network, network security, configuration management",image:a="https://selent.ai/og-image.png",imageWidth:r="1200",imageHeight:s="630",locale:o="en_US",url:l="https://selent.ai",type:c="website",author:u="Selent",publishedTime:d,structuredData:m,noindex:p=!1,hreflangLinks:f})=>{const g=e==="Selent - AI-Powered Network Operations Management for Cisco Meraki"?e:`${e} | Selent`;return i.jsxs(QN,{children:[i.jsx("title",{children:g}),i.jsx("meta",{name:"title",content:g}),i.jsx("meta",{name:"description",content:t}),i.jsx("meta",{name:"keywords",content:n}),i.jsx("meta",{name:"author",content:u}),i.jsx("meta",{property:"og:type",content:c}),i.jsx("meta",{property:"og:url",content:l}),i.jsx("meta",{property:"og:title",content:e}),i.jsx("meta",{property:"og:description",content:t}),i.jsx("meta",{property:"og:image",content:a}),i.jsx("meta",{property:"og:image:width",content:r}),i.jsx("meta",{property:"og:image:height",content:s}),i.jsx("meta",{property:"og:locale",content:o}),i.jsx("meta",{property:"og:site_name",content:"Selent"}),c==="article"&&d&&i.jsx("meta",{property:"article:published_time",content:d}),c==="article"&&u&&i.jsx("meta",{property:"article:author",content:u}),i.jsx("meta",{name:"twitter:card",content:"summary_large_image"}),i.jsx("meta",{name:"twitter:url",content:l}),i.jsx("meta",{name:"twitter:title",content:e}),i.jsx("meta",{name:"twitter:description",content:t}),i.jsx("meta",{name:"twitter:image",content:a}),p&&i.jsx("meta",{name:"robots",content:"noindex, nofollow"}),i.jsx("link",{rel:"canonical",href:l}),f&&f.map(y=>i.jsx("link",{rel:"alternate",hrefLang:y.lang,href:y.href},y.lang)),m&&i.jsx("script",{type:"application/ld+json",children:JSON.stringify(m)})]})},gc={en:[{slug:"what-weve-built-since-three-products-one-mission",title:"What We've Built Since: Three Products, One Mission",excerpt:"A few months ago we claimed AI could build anything on top of Cisco networking. Since then we've been heads-down, talking to network teams, MSPs and enterprise IT leaders, and turning what we heard into products. Here's the update: Config Backup & Restore, the Compliance Agent, and Selent MCP, now open source.",date:"2026-09-18",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Product",tags:["Cisco Meraki","Config Backup","Compliance","Selent MCP","Open Source","AI Agents","Network Automation","MSP"],coverImage:"https://images.unsplash.com/photo-1519389950473-47ba0277781c?ixlib=rb-4.0.3&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"4 min",content:` 501A few months ago, we made a bold claim: that [AI](https://pento.ai) could build anything on top of Cisco networking. Then we explained why your network already holds the answers, and how our engine turns that promise into working solutions. 502 503Since then, we've been heads-down. We've spent the time talking to network teams, MSPs, and enterprise IT leaders, and turning what we heard into products. This post is the update. 504 505## What we kept hearing 506 507The conversations kept coming back to the same few frustrations. 508 509Network teams running Cisco Meraki told us that some of the most critical operational tasks still have no native answer. Backing up and restoring configurations is one example. Replicating a proven setup across new sites is another. 510 511IT leaders told us that compliance is still a quarterly fire drill. Someone audits configurations by hand, writes a report, and starts over three months later. 512 513Engineers and SEs told us they want to talk to their infrastructure in plain language, without writing a new script for every question. 514 515These are three different problems, and we built one product for each. 516 517--- 518 519## Product 01 â Config Backup & Restore, powered by AI 520 521Configuration is the memory of your network. When a change goes wrong, or a device fails, or a site needs to be rebuilt, you need that memory to be complete and recoverable. 522 523Selent Config Backup & Restore captures your Meraki configurations and lets you roll back with confidence. It goes further than recovery, too: 524 525**Network cloning** â take a configuration that works and replicate it across new sites. You don't have to rebuild it by hand. 526 527**Switch mass deployment** â provision switches at scale from a trusted baseline, in a fraction of the time. 528 529For organizations growing across many locations, this changes how new sites come online. Each one starts from a proven standard, so nobody has to reinvent it. 530 531--- 532 533## Product 02 â The Compliance Agent 534 535Our first Specialized Agentic AI is now a product in its own right. 536 537The Selent Compliance Agent analyzes your network configurations against the standards your organization must meet, such as PCI DSS, internal security policies, and custom governance rules. It tells you whether your environment is compliant, shows where it isn't, and explains what to fix. 538
539The shift is from periodic to persistent. Compliance stops being a project your team dreads every quarter and becomes a layer that keeps working in the background. When your auditors arrive, the answers are already there. 540 541--- 542 543## Product 03 â Selent MCP, now open source 544 545The Selent MCP connects AI to your Cisco Meraki infrastructure. It dynamically exposes more than 400 Meraki API endpoints through natural language. 546 547It works with the AI clients teams already use, including Claude, ChatGPT, and Cisco AI Assistant. And we've released an open-source version for the community of network engineers, SEs, and developers building on Meraki. 548 549We believe the ecosystem gets stronger when builders have better tools. Opening the MCP is our contribution to that. 550 551--- 552 553## What hasn't changed 554 555These three products come from the same idea we started with: 556 557> **Every network is different, and the AI running it should be too.** 558 559The products solve the problems we saw again and again. Custom development is still at the core of what we do. When your team needs something no product covers, such as a specific integration, a dashboard, a workflow, or an automation, we build it for your environment, your industry, and your scale. 560 561## Built inside the Cisco ecosystem 562 563Selent is a Cisco Technology Partner, listed on the Cisco Marketplace. Everything we build runs on the Cisco infrastructure you already trust, and it's designed to extend that infrastru
563cture rather than replace it. 564 565## What's next 566 567Over the coming weeks, we'll go deeper on each product. We'll look at how the Compliance Agent works in practice, why configuration backup is a bigger risk than most teams realize, and how MSPs are scaling operations with Selent. We'll also share industry-specific use cases. 568 569If any of these problems sound familiar, we'd like to hear from you. 570 571--- 572 573*Learn more at [selent.ai](https://www.selent.ai) or find us on the [Cisco Marketplace](https://marketplace.cisco.com).* 574`},{slug:"how-selent-actually-builds-anything-meet-the-engine-behind-the-promise",title:"How Selent Actually Builds Anything: Meet the Engine Behind the Promise",excerpt:"Bold claims deserve bold explanations. Here's the story of the two technologies that make Selent's promise real: Selent MCP and Specialized Agentic AI â and how together they turn a customer's idea into a production-grade solution running on Cisco infrastructure.",date:"2026-04-13",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Network Operations",tags:["Cisco Meraki","AI Agents","MCP","Model Context Protocol","Network Automation","AIOps","Compliance","Selent MCP"],coverImage:"https://images.unsplash.com/photo-1518770660439-4636190af475?ixlib=rb-4.0.3&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"6 min",content:` 575When we published our last post â announcing that Selent had evolved into the first AI that builds anything on Cisco Networking â the question we heard most wasn't "is that possible?" 576 577It was: **"How?"** 578 579Fair. Bold claims deserve bold explanations. 580 581Today we're going under the hood. This is the story of the two technologies that make the promise real: **Selent MCP** and our **Specialized Agentic AI** â and how together they turn a customer's idea into a working, production-grade solution running on their Cisco infrastructure. 582 583## The Problem With "AI for Networking" (Before Selent) 584 585Most AI tools in the networking space fall into one of two categories. 586 587The first: dashboards with a chatbot on top. You can ask what happened, but it can't do anything about it. Reactive by design, disconnected from the actual infrastructure, and useful only after the problem already exists. 588 589The second: generic automation platforms that promise flexibility but require months of professional services to configure â before you ever see a line of working output. 590 591Neither was built for speed. Neither was built for specificity. And neither truly understands your network. 592 593We decided to build something different. 594 595--- 596 597## Layer 1: Selent MCP â The Nervous System 598 599*The foundational protocol connecting AI intelligence to live Cisco infrastructure â in real time, at scale, through 400+ API endpoints accessible via natural language.* 600 601At the core of everything Selent does is the **Selent MCP** â our implementation of the Model Context Protocol, an open standard developed by Anthropic that defines how AI models communicate with external tools, systems, and live data sources. 602 603Think of MCP as a universal language. Before it existed, every AI integration required a custom connector â a bespoke bridge between the AI model and whatever system it needed to talk to. Fragile, hard to maintain, and slow to build. 604 605With MCP, that changes. AI models and agents interact with external systems through a standardized protocol â structured, secure, and extensible by design. 606 607**Selent MCP is the first MCP server built specifically for Cisco Networking â exposing over 400 Meraki API endpoints through natural language.** 608 609That means an AI agent â or a network engineer using a tool like Claude Desktop or Claude Code â can query live network state, retrieve device configurations, execute changes, and receive real-time operational context, all through conversation rather than code. 610 611What used to require a developer writing API calls now happens in plain English: 612 613> *"Show me all the access points in the São Paulo branch that had connectivity issues in the last 24 hours."* 614 615> *"Flag every network where admin access is enabled on the WAN interface and generate a remediation report."* 616 617> *"Back up the configuration of all switches in the Houston campus and confirm completion."* 618 619The Selent MCP doesn't just retrieve information â it becomes the live operational context that every AI agent running on top of Selent uses to act. It's the nervous system connecting intelligence to infrastru
619cture. 620 621--- 622 623## Layer 2: Specialized Agentic AI â The Domain Experts 624 625*Purpose-built AI agents, each trained for a specific network operations function. They don't just answer questions â they act, continuously and autonomously, within their domain.* 626 627If Selent MCP is the nervous system, our **Specialized Agentic AI** agents are the domain experts that put that context to work. 628 629These are not general-purpose AI assistants. They are purpose-built agents, each trained and configured for a specific function within network operations. They don't just answer questions â they act, continuously and autonomously, within their domain. 630 631The distinction matters. A general AI assistant has broad knowledge but shallow context. A specialized agent has deep, operational knowledge of exactly one function â and it runs that function better than any human team could at scale. 632 633### The First Agent: Compliance 634 635Our first Specialized Agentic AI went live in Compliance â one of the highest-friction areas in enterprise network operations. 636 637Here's the reality for most IT teams managing Cisco infrastructure: compliance is a manual, periodic, exhausting process. Someone has to audit configurations against internal policies and regulatory requirements, identify gaps, produce reports, track remediation, and do it all over again next quarter. Reactive, inconsistent, and expensive in both time and risk. 638 639The **Selent Compliance Agent** changes that model entirely. It runs continuously â not quarterly, not monthly, not whenever someone has time. It monitors network configurations in real time against the policies that matter to your organization: PCI DSS, internal security frameworks, regional regulatory requirements, custom governance rules. 640 641The moment a deviation appears, it flags it, explains it, and generates a remediation recommendation with enough context for your team to act immediately. 642 643No more surprise audit findings. No more manual configuration reviews. Compliance stops being a project and becomes a persistent, automated layer of your network operations. 644 645--- 646 647## How the Two Layers Work Together 648 649The power of Selent's architecture isn't in either layer alone â it's in how they compose. When a customer engages Selent to build a custom solution, here's what actually happens: 650 651**01. We understand the problem.** 652Not just technically â operationally. What does your team actually need? What does success look like for your network, your industry, your scale? 653
654**02. Selent MCP provides live infrastructure context.** 655The AI agents don't operate on static data or assumptions â they read your actual network, in real time, through the MCP layer. 656 657**03. Specialized agents do the work.** 658Whether the deliverable is an automation workflow, a custom dashboard, a compliance engine, or a full ITSM integration â the agents build, test, and deploy it against your real environment. 659 660**04. You own a solution built for you.** 661Not a SaaS license. Not a generic template. A working, production-grade capability running on the Cisco infrastructure you already own. 662 663The result: what used to take months of consulting engagement and custom development now happens in days. 664 665--- 666 667## What Comes Next 668 669We're just getting started. Here's what's already in motion: 670 671**Expanding now** â More Specialized Agents across monitoring, provisioning, security posture, incident response, and analytics. 672 673**In development** â Fully bespoke custom builds for customers who need solutions beyond pre-built agents. 674 675**Coming soon** â Cisco Canvas Integration: Selent AI capabilities as a native layer inside Cisco's new network management platform. 676 677**Always on** â Selent MCP open and accessible via Claude Desktop, Claude Code, and any MCP-compatible AI assistant. 678 679--- 680 681## The Bottom Line 682 683*"Build anything on Cisco Networking"* was never a marketing line. 684 685It's an architecture. 686 687**Selent MCP** makes your Cisco infrastructure AI-readable â in real time, at scale, through a standardized protocol built for the future of AI-native operations. 688 689**Specialized Agentic AI** turns that live context into autonomous, expert-level action across every function that matters to your network. 690 691Together, they're how we build anything. And they're just the beginning. 692 693--- 694 695*Ready to see what Selent can build for your network? [Talk to our team](https://www.selent.ai) or explore Selent MCP on the [Cisco Marketplace](https://marketplace.cisco.com).* 696`},{slug:"ai-networking-your-network-already-has-all-the-answers",title:"AI + Networking: Your Network Already Has All the Answers. You're Just Not Asking.",excerpt:"Most enterprises have spent millions building their Cisco infrastructure, then stopped. The data is already there. The intelligence is already there. The only thing missing is the build.",date:"2026-03-17",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"AI Development",tags:["AI","Cisco","Network Automation","Custom Development","Enterprise Networking","Cisco Meraki","Digital Transformation","Managed Services"],coverImage:"https://images.unsplash.com/photo-1558494949-ef010cbdcc31?ixlib=rb-4.0.3&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"5 min",content:` 697Most enterprises have spent millions building their Cisco infrastructure. Then they stopped. They run it, they manage it, they patch it. But they never build on top of it. 698 699That's the gap where your competitors are about to leave you behind. 700 701## The Question Nobody Is Asking 702 703There is an uncomfortable truth in every enterprise boardroom. The CTO presents the network budget. The CISO presents the compliance posture. The CFO looks at the numbers. And somewhere in that conversation, nobody asks the one question that matters most: 704 705*"What is our network actually telling us, and what could it do if we let it?"* 706 707Your Cisco infrastructure is generating data every second. Traffic patterns, device behavior, anomalies, performance signals, security events, usage by location, by user, by application. It is, in every meaningful sense, one of the most information-rich systems in your organization. 708 709And in most companies, that intelligence goes nowhere. It feeds a dashboard nobody reads. It triggers alerts nobody acts on. It sits in logs that get rotated and forgotten. 710 711This is not a technology problem. It is a build problem. 712 713## Your Network Is a Platform. Start Building on It. 714 715Off-the-shelf network management tools were built for the average company. Your company is not average. Your compliance requirements, your operational workflows, your industry regulations, your security posture, none of these are average. So why are you running generic software on a sophisticated infrastru
715cture? 716 717The most forward-thinking IT and operations leaders are making a different bet. Instead of waiting for a vendor to release a feature that almost fits their need, they are commissioning custom solutions built directly on top of their Cisco infrastructure, solutions that speak their language, automate their actual workflows, and integrate with the systems they already use. 718 719These are not 18-month ERP implementations. They are targeted builds: 720 721- An automation script that eliminates a manual task costing an engineer two hours a week 722- A compliance dashboard that shows an auditor exactly what they need, in real time, with no manual exports 723- A monitoring tool that learns what normal looks like for your environment and flags anomalies before your clients notice them 724 725## What Gets Built Looks Different for Every Industry 726 727The pattern is consistent across every sector: there is a workflow that is manual, slow, or invisible. The data to fix it already exists inside the network. What was missing was the build. 728 729**Healthcare:** Real-time device compliance monitoring across clinical networks, automatically flagging unauthorized devices before a HIPAA audit does. 730 731**Retail & Hospitality:** Guest Wi-Fi analytics dashboards feeding foot traffic data directly into marketing and operations decision-making. 732 733**Financial Services:** Custom network segmentation control UIs that let compliance teams enforce policies without touching the CLI. 734 735**Manufacturing:** OT/IT convergence monitoring, bridging operational technology visibility into network control planes for predictive maintenance. 736 737**Managed Services:** Multi-tenant automation frameworks that let MSPs provision, configure, and report on client environments in minutes, not hours. 738 739**Education:** Per-building, per-floor bandwidth analytics helping campus operations understand utilization and plan infrastructure investments. 740 741Every one of these solutions was built on data that was already there. The infrastructure was already generating the signals. The only missing piece was a team willing to build. 742 743## AI Agents and Cisco Experts. Together. 744 745Selent.AI was built for exactly this moment. We combine [AI-driven development](https://nblock.ai) with deep Cisco networking expertise to build custom solutions on top of your existing infrastructure, fast, precise, and calibrated to your environment. 746 747This is not AI as a gimmick. [AI agents](https://pento.ai) handle the iteration, the code generation, the pattern recognition across your network data. Human Cisco experts handle the architecture decisions, the edge cases, the integrations that require judgment no model can replace. The result is a development capability that moves at AI speed with the reliability of certified expertise. 748 749**How it works:** 750 751**01. We start with your specific operational pain.** Not a generic use case template, not a vendor roadmap. Your actual problem. 752 753**02. We design a solution that sits on top of your Cisco infrastructure,** Meraki, Catalyst, or both, and integrates with your existing tooling. 754 755**03. We build it.** Automation scripts, analytics dashboards, control UIs, compliance tools, monitoring systems, third-party integrations. Whatever the problem requires. 756 757**04. You own it.** This is not a SaaS subscription with an opaque pricing model and a feature roadmap you cannot influence. It is yours. 758 759## The Companies That Lead Are the Ones That Build 760 761The enterprises that will define their industries over the next five years are not the ones with the largest budgets or the most sophisticated vendor contracts. They are the ones that stopped waiting for the right product to appear on a roadmap, and started building on the infrastructure they already have. 762 763Your Cisco network is not just a cost center. It is a platform. It is generating data that your operations team needs, your compliance team needs, your clients need, your leadership team needs. 764 765The data is already there. The intelligence is already there. The only thing missing is the build. 766 767Your network is ready. The only question is whether you are. 768 769--- 770 771*Tell us the problem. We'll build the solution. Share what you're working with, your environment, your challenge, your goal, and our team will c
771ome back with a concrete proposal for what a custom build on your Cisco infrastructure could look like. [selent.ai](https://www.selent.ai)* 772`},{slug:"how-to-build-automated-sla-performance-tracker-cisco-meraki-managed-clients",title:"How to Build an Automated SLA Performance Tracker for Cisco Meraki Managed Clients",excerpt:"Eight hours every Friday copying Meraki data into spreadsheets is not an SLA strategy â it's a bottleneck that caps your growth. Here's how MSPs replace manual reporting with real-time, client-facing dashboards.",date:"2026-03-10",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Managed Services",tags:["Cisco Meraki","SLA Tracking","MSP","Managed Services","Network Automation","Client Dashboard","Meraki API","Service Reporting"],coverImage:"https://images.unsplash.com/photo-1460925895917-afdab827c52f?ixlib=rb-4.0.3&auto=format&fit=crop&w=2340&q=80",featured:!1,draft:!1,readTime:"8 min",content:` 773It is Friday afternoon. Your service delivery manager has been in a spreadsheet for the past three hours. She is logged into five different Meraki organizations, pulling uptime data from the appliance status pages, copying latency numbers from the performance tool, cross-referencing incident tickets from your PSA, and pasting it all into a Google Sheet that she will email to 23 clients before end of business. 774 775She does this every week. It takes about eight hours. It is essentially her entire Friday, every Friday. She has been doing this for two years. 776 777The data is always slightly stale by the time clients receive it. The formatting is never quite consistent week to week. And every month, at least one client questions a number, which triggers another hour of going back to verify the source data. 778 779For MSPs managing Cisco Meraki networks, SLA reporting is a contractual obligation and a critical component of client retention. It is also one of the most time-consuming, error-prone, and thankless operational tasks in the business. And nearly everyone is still doing it with spreadsheets. 780 781## Why SLA Tracking Is So Painful for MSPs 782 783The pain of manual SLA tracking is not just the time it consumes. It is the compounding complexity that grows with every new client. 784 785### Data Lives in Multiple Systems 786 787A complete SLA report requires data from at least three sources: 788 789- **Meraki Dashboard**: Uptime percentages, WAN latency, loss, and MOS scores from MX appliances. Device health status across all managed devices. 790- **PSA/Ticketing System**: Incident counts, resolution times, response times â the human side of the SLA, tracking how quickly your team acknowledged and resolved issues. 791- **Monitoring Platform**: If you use external monitoring in addition to Meraki, there is another data source with its own interface, its own export format, and its own retention policies. 792 793Pulling data from one system is straightforward. Correlating data across three systems into a single coherent report for each client is where the process becomes time-intensive. 794 795### Every Client Has Different SLA Terms 796 797Client A's contract promises 99.9 percent uptime measured monthly. Client B's promises 99.5 percent measured quarterly. Client C measures uptime per-site, while Client D measures it across their entire network. Client E cares about latency thresholds. Client F only tracks incident response time. 798 799A manual reporting process must accommodate each client's specific SLA definition, calculation method, and measurement period. There is no single template that works for everyone. Every spreadsheet is customized, which means every spreadsheet is a potential source of calculation errors. 800 801### The Denominator Problem 802 803Calculating uptime seems simple: time online divided by total time, expressed as a percentage. In practice, it is fraught with edge c
803ases. 804 805Does a planned maintenance window count against uptime? What about a carrier outage outside your control? If a client's site was offline for 15 minutes because their facilities team accidentally unplugged the MX, does that count as an SLA breach? 806 807These judgment calls happen every week, and in a manual process, they are made inconsistently. The same type of outage might be excluded for one client and included for another, depending on who pulled the report that week. 808 809### Scale Breaks the Model 810 811When an MSP manages 10 clients, manual SLA reporting is annoying but sustainable. At 25 clients, it consumes a significant portion of someone's week. At 50 clients, it requires a dedicated resource. At 100 clients, even a dedicated resource cannot keep up without cutting corners on accuracy. 812 813The irony is that growing your client base â which should be your primary business goal â makes your operational burden progressively worse. SLA reporting becomes a scaling bottleneck that either limits your growth or degrades your service quality. 814 815## What Bad SLA Reporting Costs an MSP 816 817The direct cost is obvious: at 8 hours per week for 23 clients, that is 416 hours per year. At a fully loaded cost of $75 per hour for a service delivery manager, that is over $31,000 annually spent on copying data between screens. 818 819But the indirect costs are more significant. 820 821**Client churn from perceived opacity.** When clients receive a static spreadsheet once a week, they have no visibility into their network health between reports. They cannot check their uptime at 2:00 PM on a Wednesday when their CEO asks. This creates an information asymmetry that erodes trust, even when performance is excellent. 822 823**Disputed reports damage relationships.** When a client questions a number in your SLA report and it takes you an hour to trace back to the source data, the damage is already done. The question has introduced doubt. Even if the number was correct, the client now wonders about the numbers they did not question. 824 825**Missed upsell opportunities.** Detailed SLA data, presented intelligently, can reveal opportunities. A client consistently running at 99.2 percent uptime against a 99.9 percent SLA might benefit from a redundant WAN link. A client with frequent latency spikes might need SD-WAN optimization. But when SLA reporting is a manual grind, there is no bandwidth to analyze the data for strategic insights. 826 827**Staff burnout and turnover.** No one enters managed services because they love copying numbers into spreadsheets. When your skilled service delivery team spends their Fridays on data entry instead of client strategy, burnout follows. 828 829## What a Modern SLA Tracking System Looks Like 830 831Replacing the spreadsheet requires more than just automating the data pull. It requires rethinking how SLA performance is collected, calculated, presented, and consumed. 832 833### Continuous Data Collection 834 835Instead of pulling data weekly, the system continuously ingests performance metrics from the Meraki API. Uptime events, latency measurements, and device status changes are captured as they occur and stored in a purpose-built data layer. This means SLA calculations are always current, not a snapshot from whenever someone last pulled the data. 836 837### Configurable SLA Definitions 838 839Each client's SLA terms are defined as configuration, not code. Uptime threshold: 99.9 percent. Measurement period: monthly. Exclusions: planned maintenance with 48-hour advance notice. Scope: per-site. These parameters drive the calculation engine, ensuring that every client's report reflects their specific contractual terms â consistently, every time. 840 841### Automated Calculation with Exclusion Handling 842 843The system calculates SLA compliance automatically, applying the defined exclusion rules. Planned maintenance windows are excluded. Carrier outages with documented root cause are flagged for review. The calculation is consistent, auditable, and reproducible. No judgment calls vary between analysts or between weeks. 844 845### Client-Facing Dashboards 846 847This is the transformative element. Instead of a weekly spreadsheet, clients get access to a live dashboard showing their current SLA performance. They can see uptime percentages, latency trends, incident history, and resolution times in real time. They do not need to wait for Friday. They do not need to email you to check a number. 848 849For clients, this transparency builds trust. For MSPs, it eliminates the majority of data-related client inquiries. 850 851### Automated Report Generation 852 853For clients who still want a formatted report in their inbox, the system generates it automatically on whatever schedule the client prefers â weekly, monthly, quarterly. The report draws from the same continuously updated data as the dashboard, ensuring consistency between the live view and the document. 854 855## Connecting This to Meraki 856 857The Meraki Dashboard API provides the raw performance data. Organization-level device statuses, appliance uplink performance metrics, and network event logs supply the uptime and latency data that SLA calculations require. 858 859The engineering challenge is building the collection, storage, calculation, and presentation layers around these API calls â handling the nuances of multi-org MSP environments, API rate limiting across many organizations, and the per-client SLA configuration that drives custom calculations. 860 861## How Selent Eliminates the Spreadsheet 862 863Selent is built specifically for MSPs and IT teams managing Cisco Meraki infrastru
863cture. As a Cisco Meraki Technology Partner, Selent connects directly to all your managed organizations and continuously collects the performance data that drives SLA calculations. 864 865Instead of spending every Friday in a spreadsheet, Selent provides automated, client-facing dashboards that update in real time. Your clients see their SLA performance whenever they want. Your service delivery team gets their Fridays back. The data is more accurate, more current, and more transparent than any manual process could produce. 866 867MSPs that have replaced spreadsheet-based SLA reporting with Selent have freed up the equivalent of a full-time hire â while delivering a client experience that improves retention and differentiates their service offering. 868 869## Free Up Your Fridays 870 871If SLA reporting is consuming your team's time, eroding your accuracy, and limiting your ability to scale, [explore how Selent transforms Meraki SLA tracking from a weekly burden into a continuous, transparent, and effortless process](https://www.selent.ai). 872`},{slug:"how-to-analyze-cisco-meraki-switch-port-utilization-cut-licensing-waste",title:"How to Analyze Cisco Meraki Switch Port Utilization to Cut Licensing Waste",excerpt:"30% of licensed switch ports sitting idle is not a edge case â it's what organizations discover when they finally look. Here's how to audit your Meraki MS switch utilization and turn the data into real cost savings.",date:"2026-03-09",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Network Operations",tags:["Cisco Meraki","Switch Port Analytics","MS Switch","Licensing Optimization","Network Automation","Capacity Planning","Meraki API","Cost Reduction"],coverImage:"https://images.unsplash.com/photo-1544197150-b99a580bb7a8?ixlib=rb-4.0.3&auto=format&fit=crop&w=2340&q=80",featured:!1,draft:!1,readTime:"7 min",content:` 873A manufacturing company with 15 factory sites recently completed an audit of their Cisco Meraki MS switch infrastructure. The result was staggering: 30 percent of their licensed switch ports had zero traffic for over 90 days. They were paying for ports that connected to nothing. 874 875This is not an outlier. Across the industry, network infrastructure utilization studies consistently find that 20 to 40 percent of deployed switch ports are idle at any given time. For organizations on the Meraki per-device licensing model, each idle port on a switch that did not need to be deployed represents a direct, recurring cost with zero return. 876 877The question is not whether you have idle ports. You almost certainly do. The question is whether you know
877which ones, why they are idle, and what to do about it. 878 879## Why Switch Port Utilization Is a Blind Spot 880 881Network teams are accustomed to monitoring uplink bandwidth, device health, and application performance. Switch port-level utilization receives far less attention, and for understandable reasons. 882 883**The Meraki dashboard shows port status, not utilization trends.** You can see which ports are currently up or down, and you can view traffic statistics for individual ports. But aggregating this across hundreds of switches to understand utilization patterns over time requires either significant manual effort or custom tooling. 884 885**Port counts feel static.** When a site is initially deployed, the number of switches and ports is based on a cabling plan. That plan accounts for current needs plus some growth capacity. Once deployed, the switch infrastructure is rarely revisited. Desks are moved, departments are reorganized, equipment is decommissioned â but the switches remain as originally installed. 886 887**Licensing costs are bundled.** Because Meraki licensing is per-device rather than per-port, the cost of an underutilized switch is not immediately visible on a line item. A 48-port switch with 15 active ports costs the same license fee as one with 45 active ports. This obscures the waste. 888 889## The Real Cost of Idle Switch Ports 890 891Consider a concrete example. A manufacturing company operates 15 sites with an average of 10 MS switches per site. That is 150 switches. If they are predominantly 48-port models, the total port count is 7,200. At a 30 percent idle rate, 2,160 ports are unused. 892 893Not every idle port represents a switch that can be removed. A switch with 40 active ports and 8 idle ports is appropriately sized. But a switch with 8 active ports and 40 idle ports might be replaceable with a smaller model, or its active connections might be consolidatable to a neighboring switch. 894 895The analysis typically reveals that 10 to 15 percent of deployed switches can be decommissioned entirely, with their active connections redistributed to adjacent switches that have available capacity. Each decommissioned switch represents a recurring annual savings in licensing costs â plus reduced power consumption, rack space, and maintenance overhead. 896 897For 150 switches, eliminating even 15 of them can generate significant savings that compound year over year. 898 899## The Data You Need to Collect 900 901Effective switch port utilization analysis requires more than a point-in-time snapshot. You need trend data over a meaningful period to distinguish between truly idle ports and ports with legitimate but intermittent usage patterns. 902 903### Port Status Over Time 904 905For every port on every switch, capture whether it is in an up or down state at regular intervals. A port that has been administratively up but link-down for 90 consecutive days is a strong candidate for idle classification. A port that is down Monday through Friday but up on weekends might serve a specific function that manual analysis would miss. 906 907### Traffic Volume by Port 908 909Beyond link status, actual traffic throughput per port tells a more nuanced story. A port that shows as "up" because a device is connected but passes less than 1 MB of traffic per week is functionally idle. The connected device might be powered off, in sleep mode, or simply not performing any meaningful work. 910 911### Port Configuration Context 912 913Understanding what a port is configured for helps classify its utilization. A port configured as a trunk uplink to an access point should always be active. A port configured as an access port on the data VLAN that has been idle for months was likely intended for a workstation that was never deployed or has since been removed. 914 915### Historical Connection Patterns 916 917Some ports serve seasonal or event-driven purposes: conference rooms used quarterly, manufacturing lines that run during specific production cycles, training labs active during onboarding periods. Without historical pattern analysis, these ports might be incorrectly flagged as waste. 918 919## How to Approach the Analysis 920 921### Phase 1: Data Collection 922 923The Meraki Dashboard API provides switch port status information through endpoints like \`/devices/{serial}/switch/ports/statuses\`. For each switch, this returns the current state of every port, including link status, speed, duplex, and traffic counters. 924 925To build a trend view, this data needs to be collected at regular intervals and stored in a time-series database or data warehouse. Daily collection is sufficient for utilization analysis. The collection needs to run across all switches in all networks, handling API rate limits and device availability gracefully. 926 927### Phase 2: Classification 928 929With 30 to 90 days of data collected, ports can be classified into categories: 930 931- **Active**: Consistently passing meaningful traffic 932- **Low utilization**: Connected but passing minimal traffic 933- **Idle**: No link or no traffic for the analysis period
934- **Infrastructure**: Uplinks, trunks, and management ports that should always be active 935- **Seasonal**: Showing clear cyclical usage patterns 936 937### Phase 3: Optimization Recommendations 938 939Based on the classification, specific recommendations emerge: 940 941- **Switch consolidation**: Identify switches where active ports could be relocated to adjacent switches with available capacity, allowing the underutilized switch to be decommissioned. 942- **Model right-sizing**: Flag sites where 48-port switches could be replaced with 24-port models at next renewal, reducing licensing costs. 943- **Capacity warnings**: Identify switches approaching full utilization that may need expansion before they become bottlenecks. 944- **Decommission candidates**: Highlight ports that have been idle for extended periods and may have connected devices that should be removed from the asset inventory. 945 946### Phase 4: Ongoing Monitoring 947 948Utilization analysis is not a one-time exercise. Port usage patterns change as the organization evolves. A quarterly analysis cycle ensures that optimization opportunities are identified continuously and that capacity is allocated where it is actually needed. 949 950## The Challenge of Doing This at Scale 951 952For a single site with five switches, this analysis is manageable with a spreadsheet and some patience. For 15 sites with 150 switches and 7,200 ports, the data volume and analytical complexity exceed what manual processes can handle reliably. 953 954The difference between "Port 23 on Switch MX-03 at Building 7 has been idle for 90 days" and "Switch MX-03 at Building 7 has 38 idle ports and its 10 active connections can be absorbed by the adjacent MX-04, which has 30 available ports â saving one Enterprise license at next renewal" is the difference between data and actionable insight. 955 956## How AI-Powered Analytics Elevate the Process 957 958This is precisely the type of analysis where AI excels. Intelligent platforms can ingest raw port utilization data, apply classification algorithms that account for seasonal patterns and infrastructure roles, and generate specific, prioritized optimization recommendations with calculated cost savings. 959 960Selent's AI agents perform this analysis natively for Cisco Meraki MS switches. As a Meraki Technology Partner, Selent connects to your Meraki environment, collects port-level utilization data across all your sites, and generates monthly reports that identify consolidation opportunities, right-sizing recommendations, and capacity warnings. 961 962The 30 percent idle rate that the manufacturing company discovered was not found through manual spreadsheet work. It was surfaced by intelligent analysis that no human team could perform at that scale with that consistency â and it translated directly into a licensing renewal that cost significantly less than the previous year. 963 964## Stop Paying for Ports You Are Not Using 965 966Every idle switch port on a Meraki-licensed device is a line item on your renewal invoice that delivers no value. Understanding your actual utilization is the first step toward right-sizing your infrastructure, reducing costs, and planning capacity based on data rather than assumptions. 967 968[Discover how Selent can analyze your Meraki switch port utilization and identify concrete cost savings](https://www.selent.ai). 969`},{slug:"how-to-monitor-cisco-meraki-mv-camera-health-multiple-campuses",title:"How to Monitor Cisco Meraki MV Camera Health Across Multiple Campuses",excerpt:"A camera offline for 11 days with no alert is a failed security system, not a technical glitch. Here's how to build centralized health monitoring for Meraki MV cameras â with automated alerts before an incident exposes the gap.",date:"2026-03-08",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Network Operations",tags:["Cisco Meraki","MV Cameras","Security Camera Monitoring","Campus Security","Network Automation","Uptime Monitoring","Meraki API","AIOps"],coverImage:"https://images.unsplash.com/photo-1557597774-9d475d030cc4?ixlib=rb-4.0.3&auto=format&fit=crop&w=2340&q=80",featured:!1,draft:!1,readTime:"7 min",content:` 970It is 3:47 PM on a Tuesday when the principal calls the IT help desk. There was an incident on the playground during lunch. They need the camera footage. The IT team logs into Meraki, navigates to the camera, and discovers it has been offline for 11 days. 971 972Nobody knew. The camera failed silently. The footage does not exist. The incident has no video record. 973 974This scenario plays out with alarming regularity in school districts, hospital systems, retail chains, and any organization operating Cisco Meraki MV cameras at scale. The cameras are deployed, they work well, but monitoring hundreds of them across dozens of locations for c
974ontinuous health is a problem that the native Meraki dashboard was not designed to solve. 975 976## The Scale Problem with MV Camera Monitoring 977 978A mid-size school district might operate 500 MV cameras across 30 campuses. A hospital system might have 800 across 15 facilities. A retail chain might deploy 1,200 across 100 stores. 979 980In the Meraki dashboard, camera status is visible per network. You can see which cameras are online and offline when you navigate to a specific network's camera overview page. For a single building, this is fine. For 30 campuses, it means logging in, navigating to Campus 1, checking camera status, going back, navigating to Campus 2, checking camera status, and repeating this process 30 times. 981 982At 500 cameras, manual monitoring is not just inefficient. It is practically impossible. No one is going to check 500 cameras every day. The result is a monitoring gap where offline cameras are only discovered when someone needs the footage and it is not there. 983 984## Why Cameras Go Offline and Why It Matters 985 986Meraki MV cameras are reliable devices, but they operate in challenging environments. Understanding the common failure modes helps explain why proactive monitoring is essential. 987 988### Power Issues 989 990Cameras powered via PoE are dependent on the switch port and the PoE budget. A switch firmware update that reboots the device temporarily drops power to all connected cameras. A facilities team plugging in additional devices to a PoE switch can exceed the power budget, causing the switch to deprioritize certain ports. The camera loses power and goes offline without any alert reaching the IT team. 991 992### Network Connectivity 993 994A camera is only as reliable as its network path. A misconfigured switch port, a VLAN change, or a damaged cable can silently disconnect a camera. The camera itself may be functioning perfectly, but it cannot reach the Meraki cloud to report its status or stream video. 995 996### Storage Failures 997
998Meraki MV cameras with local storage can experience disk failures that stop recording even while the camera appears online. The device streams live video but retains nothing. This failure mode is particularly insidious because the camera shows as "online" in the dashboard while providing zero archival value. 999 1000### Environmental Factors 1001 1002Outdoor cameras face weather exposure, vandalism, and physical impact. Indoor cameras in gyms, cafeterias, and loading docks face heat, humidity, and physical stress. These environmental factors cause failures that are not predictable but are entirely manageable if detected quickly. 1003 1004## The Consequences of Silent Camera Failure 1005 1006When a security camera fails without detection, the impact extends far beyond a missing video clip. 1007 1008**Liability exposure.** Organizations deploy cameras for security, safety, and liability protection. When an incident occurs and the relevant camera was offline, the organization loses its primary evidence source. In K-12 environments, this can mean unresolvable disputes between students, parents, and staff. In healthcare, it can complicate patient safety investigations. 1009 1010**Compliance violations.** Many industries have regulatory requirements for video surveillance coverage. Healthcare facilities may need continuous monitoring of medication storage areas. Schools may have state-mandated camera requirements in specific locations. An offline camera in a required coverage zone is a compliance violation, regardless of whether an incident occurs. 1011 1012**Wasted investment.** MV cameras represent significant capital expenditure. If 10 percent are offline at any given time without anyone knowing, the organization is getting 90 percent of the coverage it paid for. Over time, the unmonitored failure rate tends to grow as aging devices fail and are not replaced. 1013 1014**Erosion of security culture.** When staff learn that cameras are frequently offline and no one notices, the deterrent value of the entire camera system diminishes. The cameras become decoration rather than infrastructure. 1015 1016## What Effective Camera Health Monitoring Requires 1017 1018A proper camera health monitoring system for Meraki MV at scale needs several capabilities working together. 1019 1020### Centralized Status View 1021 1022Every camera across every campus on one screen. Color-coded status showing online, offline, and degraded states at a glance. The ability to filter by campus, building, camera type, or status. No clicking through 30 individual networks. 1023 1024### Real-Time Offline Detection 1025 1026When a camera goes offline, the system should detect it within minutes, not hours or days. This requires continuous polling of camera status through the Meraki API, comparing current state against expected state, and immediately flagging deviations. 1027 1028### Intelligent Alerting 1029 1030Not every offline camera is an emergency. A camera that reboots during a firmware update and comes back online in three minutes should not generate a ticket. A camera that has been offline for 30 minutes should. The alerting system needs configurable thresholds, suppression for known maintenance windows, and escalation paths for extended outages. 1031 1032### Automated Ticket Creation 1033 1034When a camera crosses the offline threshold, the system should automatically create a ticket in your ITSM platform with all relevant context: camera name, location, building, floor, how long it has been offline, and the last known status. This eliminates the gap between detection and response. 1035 1036### Storage and Recording Verification 1037 1038Beyond simple online/offline status, the system should verify that cameras with local storage are actively recording. A camera that is online but not writing to disk is a false sense of security. 1039 1040### Historical Uptime Reporting 1041 1042Administrators and security directors need to demonstrate camera system reliability over time. Monthly or quarterly reports showing uptime percentages by campus, trends in failure rates, and mean time to repair provide the data needed for budget discussions, vendor evaluations, and compliance documentation. 1043 1044## Building This with the Meraki API 1045 1046The Meraki Dashboard API provides the necessary endpoints. The \`/organizations/{orgId}/camera/statuses\` endpoint returns the online/offline status of all MV cameras across an organization. Device detail endpoints provide model, firmware version, and network location. 1047 1048The challenge is orchestrating these across multiple organizations, polling at sufficient frequency, handling rate limits, and building the visualization and alerting layers on top. For a team with development resources, building a basic status dashboard is achievable. Building one that includes intelligent alerting, automated ticketing, storage verification, and historical reporting is a substantially larger effort that requires ongoing maintenance. 1049 1050## How Intelligent Automation Closes the Gap 1051 1052Purpose-built network operations platforms can dramatically compress the time from zero to full c
1052amera monitoring capability. By leveraging the Meraki API natively and providing pre-built dashboards, alerting, and integration frameworks, these platforms eliminate the development and maintenance burden. 1053 1054Selent is designed for exactly this use case. As a Cisco Meraki Technology Partner, Selent connects to your Meraki environment and provides unified device health monitoring across all your networks and organizations. For MV cameras specifically, Selent's AI-powered platform delivers the single-pane visibility, real-time offline detection, and automated alerting that keeps your security infrastructure accountable. 1055 1056When a camera goes dark, Selent catches it the same day â not 11 days later when someone needs the footage that no longer exists. 1057 1058## Never Miss Another Offline Camera 1059 1060The gap between deploying cameras and monitoring cameras is where organizations lose the value of their security investment. Whether you manage 50 cameras or 5,000, a camera you do not know is offline is a camera that is not protecting anyone. 1061 1062[Discover how Selent brings intelligent camera health monitoring to Cisco Meraki MV deployments](https://www.selent.ai). 1063`},{slug:"how-to-automate-vlan-provisioning-new-cisco-meraki-sites",title:"How to Automate VLAN Provisioning for New Cisco Meraki Sites",excerpt:"Opening a new warehouse or branch shouldn't take days of manual configuration. Learn how to automate the full Meraki site deployment â VLANs, firewall rules, SSIDs â so a single form triggers everything.",date:"2026-03-07",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Network Automation",tags:["Cisco Meraki","VLAN Provisioning","Network Automation","Zero-Touch Deployment","MX Appliance","MS Switch","MR Access Point","Meraki API"],coverImage:"https://images.unsplash.com/photo-1586528116311-ad8dd3c8310d?ixlib=rb-4.0.3&auto=format&fit=crop&w=2340&q=80",featured:!1,draft:!1,readTime:"7 min",content:` 1064By the end of this guide, you will understand how to transform new Meraki site provisioning from a multi-day, error-prone manual process into an automated workflow that completes in minutes. 1065 1066If your organization opens new locations regularly â whether warehouses, retail stores, branch offices, or clinics â you already know the provisioning bottleneck. Every new site needs the same foundational network configuration: VLANs, firewall rules, DHCP scopes, SSIDs, switch port assignments, and traffic shaping policies. Across MX appliances, MS switches, and MR access points, a single site deployment can involve hundreds of individual configuration settings. 1067 1068Doing this manually, once, is tedious but manageable. Doing it ten times a year is a drag on your team. Doing it at scale, consistently, without errors, is effectively impossible by hand. 1069 1070## The Anatomy of a Manual Meraki Site Deployment 1071 1072To appreciate why automation matters, it helps to walk through what a manual new site provisioning actually involves. 1073 1074### Network Creation and Device Claiming 1075 1076A new network is created in the Meraki dashboard. Devices are claimed using their serial numbers. If the organization uses templates, the network is bound to the appropriate template. This step is relatively straightforward but sets the stage for everything that follows. 1077 1078### VLAN Configuration on the MX Appliance 1079 1080The MX appliance needs its VLAN structure defined. A typical site might require five to eight VLANs: 1081 1082- **VLAN 10** â Corporate data (workstations, laptops) 1083- **VLAN 20** â Voice (IP phones) 1084- **VLAN 30** â Guest wireless (internet-only access) 1085- **VLAN 40** â IoT devices (cameras, sensors, printers) 1086- **VLAN 50** â Management (network infrastructure) 1087- **VLAN 60** â POS or specialized systems 1088 1089Each VLAN needs a subnet assignment, a DHCP scope with the correct range, DNS servers, default gateway, and lease duration. For six VLANs, that is approximately 3
10890 individual settings on the MX alone. 1090 1091### Firewall Rules 1092 1093Inter-VLAN routing rules must be configured to enforce segmentation. Guest VLAN traffic should never reach the corporate VLAN. IoT devices should be restricted to specific upstream services. Voice traffic needs QoS tagging and priority. A standard ruleset might include 15 to 25 individual rules, each with source, destination, protocol, port range, and action. 1094 1095### Switch Port Assignments 1096 1097The MS switches need each port assigned to the correct VLAN based on what will be connected. Ports 1 through 24 might be access ports on VLAN 10. Ports 25 through 28 are trunk ports to access points. Two ports are designated for voice VLAN with 802.1X authentication. This configuration must match the physical cabling plan for the site. 1098 1099### Wireless SSID Configuration 1100 1101The MR access points need their SSIDs configured with the correct authentication method, VLAN assignment, bandwidth limits, and splash page settings. A typical site might have three SSIDs: corporate WPA2-Enterprise on VLAN 10, guest with splash page on VLAN 30, and IoT with PSK on VLAN 40. 1102 1103### The Time and Error Budget 1104 1105For an experienced Meraki administrator working carefully, this process takes one to two full days per site. For organizations opening 10 or more sites per year, that is two to four weeks of engineering time consumed by repetitive provisioning work. 1106 1107And the error rate is not zero. Studies across the networking industry consistently show that manual configuration processes produce errors in a significant percentage of deployments. A mistyped subnet mask, a VLAN ID entered as 30 instead of 40, a firewall rule with the source and destination reversed. These errors often are not discovered during initial testing. They surface weeks later as intermittent connectivity issues, security gaps, or failed compliance audits. 1108 1109## Why Meraki Templates Only Solve Part of the Problem 1110 1111Meraki configuration templates address some of this pain. A template lets you define a standard configuration and bind multiple networks to it, so changes propagate automatically. This is powerful for ongoing management. 1112 1113But templates have limitations for initial provisioning. 1114 1115**Not everything is templatable.** Site-specific settings like subnet assignments, DHCP ranges, and local addressing cannot be standardized in a template because they are unique to each location. 1116 1117**Template binding is all-or-nothing.** Once a network is bound to a template, the template controls the configuration. Site-specific customizations require overrides, which can create management complexity at scale. 1118 1119**Templates do not handle the orchestration.** Creating the network, claiming devices, binding the template, configuring site-specific overrides, and verifying the deployment are all manual steps that templates do not automate. 1120 1121For organizations that need true zero-touch provisioning, templates are a useful component but not a complete solution. 1122 1123## Designing an Automated Provisioning Workflow 1124 1125A proper automated provisioning system takes a fundamentally different approach. Instead of an engineer clicking through dashboard screens, the process begins with a structured input â a form, a ticket, a spreadsheet row, or an API call â that provides the site-specific parameters. 1126 1127### The Input 1128 1129A provisioning request includes the minimum unique data for the new site: site name, address, subnet allocation, device serial numbers, and any site-specific requirements such as number of switch ports, wireless density needs, or special VLAN requirements. 1130 1131### The Orchestration Engine 1132 1133An automation platform takes this input and executes the full provisioning sequence via the Meraki Dashboard API: 1134 11351. Create the network with the correct name and tags 11362. Claim and assign devices 11373. Bind to the appropriate configuration template 11384. Apply site-specific VLAN configurations with correct subnets 11395. Configure DHCP scopes for each VLAN 11406. Set firewall rules per the approved baseline 11417. Assign switch ports according to the standard cabling plan 11428. Configure SSIDs with correct VLAN mappings 11439. Run validation checks to confirm every setting is correct 1144 1145### The Validation 1146 1147Automated validation is what separates a robust provisioning system from a script that fires and forgets. After configuration is applied, the system queries each device's configuration back from the API and compares it against the intended state. Mismatches are flagged immediately, before any user traffic touches the network. 1148 1149## Where This Gets Complex 1150 1151Building this with raw Meraki API calls is achievable but involves significant engineering complexity. 1152 1153**Error handling.** API calls fail. Devices are not yet online when you try to configure them. Rate limits throttle your requests mid-provisioning. A robust system needs retry logic, state management, and rollback capabilities. 1154 1155**Variation management.** Not every site is identical. A warehouse might need different VLAN structures than a retail store. The provisioning system needs to support multiple site profiles without becoming unmaintainable. 1156 1157**Change management integration.** Provisioning a new site should create audit records, notify stakeholders, and integrate with your change management process. The automation should not be a black box. 1158 1159**Ongoing maintenance.** When your standard baseline changes, the provisioning templates need to update. When the Meraki API evolves, the automation needs to adapt. This is not a build-once solution. 1160 1161## How Intelligent Platforms Simplify This 1162 1163Modern network automation platforms â particularly those purpose-built for the Meraki ecosystem â abstract away the API complexity and provide a managed provisioning workflow. 1164 1165Selent approaches this by combining deep Meraki API integration with AI-powered intelligence. As a Cisco Meraki Technology Partner, Selent understands the Meraki configuration schema natively. A provisioning workflow in Selent takes your site parameters, applies your approved baseline configurations, handles all the API orchestration and error handling, and validates the result. 1166 1167What used to take days takes minutes, with a complete audit trail of every action taken. The AI component catches problems before they are deployed: subnet overlaps with another site's allocation, requested firewall rulesets that deviate from your security baseline, or configuration conflicts that would have caused a service outage on day one. 1168 1169For a logistics company opening 10+ warehouses a year, that difference is measured in weeks of reclaimed engineering time â and zero post-deployment c
1169onfig errors. 1170 1171## The Business Case for Automation 1172 1173Automated provisioning saves 20 to 40 engineering days annually for organizations opening 10 sites per year. But the savings extend beyond time. Zero configuration errors means no post-deployment troubleshooting. Consistent baselines mean every site is compliant from day one. Complete audit trails mean change management is documented automatically. 1174 1175If your team is still provisioning Meraki sites manually, [explore what automated, AI-powered provisioning looks like with Selent](https://www.selent.ai). 1176`},{slug:"how-to-detect-configuration-drift-cisco-meraki-organizations",title:"How to Detect Configuration Drift Across Multiple Cisco Meraki Organizations",excerpt:"Right now, devices in your Meraki organizations have drifted from baseline without anyone knowing. Here's how to catch semantic configuration changes before they become security incidents, compliance failures, or client surprises.",date:"2026-03-06",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Network Operations",tags:["Cisco Meraki","Configuration Drift","MSP","Multi-Org Management","Network Automation","Change Management","Meraki API","AIOps"],coverImage:"https://images.unsplash.com/photo-1558494949-ef010cbdcc31?ixlib=rb-4.0.3&auto=format&fit=crop&w=2340&q=80",featured:!1,draft:!1,readTime:"7 min",content:` 1177You have 200 Meraki organizations under management. Each one has its own set of MX appliances, MS switches, and MR access points, all configured to your approved baseline. You deployed them correctly. You documented the standards. You trained your team. 1178 1179And yet, right now, at least a dozen of those organizations have drifted from baseline without anyone knowing. 1180 1181Someone added a firewall rule to troubleshoot a printer and never removed it. A junior tech enabled a port that should have stayed disabled. A client's internal IT person logged into their Meraki dashboard and changed the VLAN configuration because they read a blog post. The drift is silent, incremental, and inevitable. 1182 1183For MSPs managing large Meraki portfolios, configuration drift is not a theoretical risk. It is a daily reality that erodes security posture, complicates troubleshooting, and creates liability with every undetected deviation. 1184 1185## What Configuration Drift Actually Looks Like in Meraki Environments 1186 1187Configuration drift is the gradual divergence of a device's running configuration from its intended baseline. In Meraki environments, it takes specific forms worth understanding. 1188 1189### Firewall Rule Creep 1190 1191The most common and most dangerous form of drift in MX appliances. A "temporary" allow rule gets added during troubleshooting. Another rule gets inserted to accommodate a new application. Over months, the firewall policy accumulates exceptions that no one can fully explain. The baseline called for 15 rules. The appliance now has 38. 1192 1193### SSID Proliferation 1194 1195A Meraki MR access point should broadcast exactly the SSIDs defined in your baseline. But guest networks get added for events. Test SSIDs appear during deployments and never get removed. A well-meaning site manager creates a "VIP" network for their executive floor. Each unauthorized SSID is an unmanaged entry point into the network. 1196 1197### VLAN Reassignment 1198 1199Your baseline defines VLAN 10 for corporate devices, VLAN 20 for voice, VLAN 30 for guest. Someone at a client site reassigns a switch port from VLAN 10 to VLAN 30 to "fix" a connectivity issue, inadvertently placing a corporate workstation on the guest network. The device works, so no one reports a problem. But the security boundary has been breached. 1200 1201### Group Policy Modifications 1202 1203Meraki group policies control bandwidth limits, content filtering, and application shaping. When these get modified without following change management, the effects can be subtle. Users experience slightly different performance, content filters stop blocking certain categories, or bandwidth allocations shift in ways that degrade service for other users. 1204 1205## Why Traditional Drift Detection Fails at Scale 1206 1207The obvious response to configuration drift is to check for it. Export the current configuration, compare it to the baseline, and flag the differences. In theory, this works. In practice, at MSP scale, it collapses under its own weight. 1208 1209**Volume overwhelms manual review.** Across 200 organizations, you might have 2,000 individual devices. Exporting and comparing configurations for each one, even weekly, generates thousands of diff outputs. No human can meaningfully review that volume. 1210 1211**Text diffs miss semantic meaning.** A traditional diff tool will tell you that line 47 changed from \`"vlanId": 10\` to \`"vlanId": 30\`. It will not tell you that this change moved a security camera from a segmented IoT VLAN to the corporate data VLAN, creating a lateral movement path that violates your compliance framework. Text-level comparison without contextual understanding produces noise, not intelligence. 1212 1213**Baselines themselves drift.** In a dynamic MSP environment, the approved baseline evolves. New security standards get adopted. New applications require new rules. If your comparison target is a static document from six months ago, your drift detection is comparing against an outdated standard. 1214 1215**API rate limits constrain polling frequency.** Pulling full configuration details across 200 Meraki organizations taxes the API significantly. Rate limiting means you cannot check everything as often as you would like, forcing trade-offs between coverage and freshness. 1216 1217## The Real Impact of Undetected Drift 1218 1219When drift goes undetected, the consequences compound. 1220 1221**Security incidents with unclear root causes.** A breach investigation reveals an unauthorized firewall rule that was added four months ago. No one remembers who added it or why. The audit trail is incomplete. The investigation stalls. 1222 1223**Compliance failures during audits.** Your client's PCI DSS assessment reveals that three locations have VLAN configurations that do not match the documented network segmentation plan. The finding triggers a remediation timeline and puts the client's payment processing at risk. 1224 1225**Troubleshooting becomes archaeology.** When a network issue arises at a site whose configuration has drifted significantly from baseline, your technicians are not just fixing the immediate problem. They are reverse-engineering months of undocumented changes to understand the current state before they can even begin diagnosing the actual issue. 1226 1227**Client trust erodes.** When an MSP's client discovers their network configuration does not match what was promised, the conversation is uncomfortable. It does not matter that the drift was caused by the client's own internal staff making changes. The expectation is that someone was watching. 1228 1229## What Effective Drift Detection Requires 1230 1231Solving configuration drift at MSP scale requires capabilities that go beyond scripted comparisons. 1232 1233### Continuous Monitoring, Not Periodic Scans 1234 1235Drift happens between scans. A system that checks configurations weekly will miss changes that are made and reverted within that window. Effective detection requires near-continuous monitoring, capturing changes as they happen rather than discovering them after the fact. 1236 1237### Semantic Analysis, Not Text Comparison 1238 1239The difference between a meaningful change and a cosmetic one cannot be determined by comparing strings. Effective drift detection needs to understand the Meraki configuration schema. It needs to know that changing a VLAN ID on a port is fundamentally different from changing a port's description, even though both appear as single-field changes in a JSON diff. 1240 1241### Impact Assessment 1242 1243Every detected drift should come with a risk evaluation. Did this change affect security posture? Does it violate a compliance requirement? Could it impact network performance? Without impact context, drift alerts become noise that teams learn to ignore. 1244 1245### Dynamic Baselines 1246 1247The comparison target should be a living document that updates through a governed change management process. When a new firewall standard is approved, the baseline updates. When a client requests a legitimate configuration change, the baseline reflects it. Drift is measured against what the configuration should be now, not what it was six months ago. 1248 1249## How AI Changes the Equation 1250 1251This is where artificial intelligence makes a material difference. AI agents can process the volume of configuration data that would overwhelm human reviewers. More importantly, they can perform the semantic analysis that text-based tools cannot. 1252 1253An AI-powered drift detection system can examine a configuration change, understand its functional impact, and classify it: security-relevant, compliance-affecting, performance-impacting, or cosmetic. It can correlate changes across devices, identifying that a firewall rule change on an MX appliance and a VLAN change on an MS switch at the same site may be related. It can learn your organization's patterns and prioritize alerts based on actual risk rather than raw change volume. 1254 1255Selent's AI agents are built specifically for this use case within the Cisco Meraki ecosystem. As a Meraki Technology Partner, Selent connects across all your organizations, continuously monitors configurations against your defined baselines, and surfaces drift with semantic analysis that explains not just what changed â but what that change means for your security, compliance, and operational health. MSPs using Selent catch configuration issues before their clients ever notice them. 1256 1257## Taking Control of Configuration Drift 1258 1259For MSPs managing large Meraki portfolios, configuration drift is not a problem you can solve by hiring more people to look at dashboards. The scale demands automation, and the complexity demands intelligence. 1260 1261The first step is acknowledging that drift is happening in your environment right now. The second step is deploying the tools to find it before your clients â or their auditors â find it for you. 1262 1263[Explore how Selent brings AI-powered configuration drift detection to Cisco Meraki environments](https://www.selent.ai). 1264`},{slug:"how-to-automate-guest-wifi-compliance-reporting-cisco-meraki",title:"How to Automate Guest Wi-Fi Compliance Reporting for Cisco Meraki MR Networks",excerpt:"Six hours a week pulling guest Wi-Fi data by hand is not compliance â it's compliance theater. Here's how to automate the entire workflow and deliver audit-ready reports without anyone touching a dashboard.",date:"2026-03-05",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Compliance & Security",tags:["Cisco Meraki","Guest Wi-Fi","Compliance Reporting","MR Networks","Rogue SSID","Network Automation","Meraki API","Audit"],coverImage:"https://images.unsplash.com/photo-1563013544-824ae1b704d3?ixlib=rb-4.0.3&auto=format&fit=crop&w=2340&q=80",featured:!1,draft:!1,readTime:"7 min",content:` 1265Every Monday morning at 7:00 AM, someone on your team opens the Meraki dashboard, navigates to the wireless section, and begins the tedious ritual of pulling last week's guest Wi-Fi data. Client connection logs. Splash page authentication records. Usage policy enforcement status. Rogue SSID scan results. They copy numbers into a spreadsheet, format it to match the template the compliance team expects, and email it before lunch. 1266 1267Six hours later, the report is done. It covers one week. And next Monday, they will do it all over again. 1268
1269For hospitality organizations, healthcare facilities, educational institutions, and any business offering guest wireless access, this is not optional work. It is a regulatory and liability requirement. The question is whether it needs to consume this much human effort. 1270 1271## Why Guest Wi-Fi Compliance Reporting Is Uniquely Painful 1272 1273Guest wireless networks create a distinct compliance surface that internal networks do not. When you provide internet access to people outside your organization, you inherit a set of obligations that vary by industry, jurisdiction, and the specific data your network touches. 1274 1275### The Data You Need to Collect 1276 1277At minimum, a robust guest Wi-Fi compliance report typically includes: 1278 1279- **Client access logs.** Who connected, when, from what device, and for how long. In many jurisdictions, regulations require retaining this data for a specified period, sometimes up to 12 months. 1280- **Usage policy enforcement.** Proof that your splash page presented acceptable use terms and that the user acknowledged them before gaining access. Without this, your organization may be liable for how guests use your network. 1281- **Rogue SSID detection.** Any unauthorized access points broadcasting near your network represent both a security risk and a compliance gap. Auditors want to know you are actively scanning and responding. 1282- **Content filtering status.** If you are running content filtering on the guest network, compliance reports need to confirm it was active and properly configured throughout the reporting period. 1283- **Bandwidth and usage anomalies.** Unusual download patterns, connections to flagged domains, or devices consuming disproportionate bandwidth can indicate misuse that creates liability. 1284 1285### Why Manual Collection Breaks Down 1286 1287The Meraki dashboard provides all of this data. The problem is that it lives in different places, under different navigation paths, in different formats. Client connection data is under the wireless clients section. Rogue SSID information is under Air Marshal. Splash page logs are in their own section. Content filtering lives under the security appliance. 1288 1289Pulling a single week's report means visiting five or six different screens, often across multiple networks if your organization operates multiple properties. For a hotel group with 15 properties, each with its own Meraki network, this process multiplies by 15 every single week. That is not six hours of work. It is closer to a full-time job. 1290 1291## The Risks of Manual Compliance Workflows 1292 1293Beyond the time cost, manual reporting introduces risks that organizations rarely acknowledge until they face an audit. 1294 1295**Human error in data transcription.** Every time a number is manually copied from a dashboard into a spreadsheet, there is a chance it is copied wrong. A misreported date, an omitted property, a transposed number. These errors are invisible until an auditor cross-references your report against the source data. 1296 1297**Inconsistent reporting formats.** When different team members pull reports on different weeks, subtle variations creep in. One person includes the rogue SSID count, another forgets. One captures the full MAC address log, another truncates it. Over time, your compliance archive becomes a patchwork of inconsistent documents. 1298 1299**Gaps in coverage.** If the person responsible for pulling reports is on vacation, sick, or simply overloaded, reports get delayed or skipped. A missing week in your compliance archive is exactly the kind of gap that triggers deeper audit scrutiny. 1300 1301**Stale data masking real problems.** A weekly manual report reflects the state of the network at the moment someone looked at it. If a rogue SSID appeared on Tuesday and disappeared on Thursday, and the report was pulled on Friday, there may be no record it ever existed. This is not compliance. It is compliance theater. 1302 1303## What a Proper Automated Compliance Workflow Looks Like 1304 1305Automating guest Wi-Fi compliance reporting is not simply scheduling a script to hit the Meraki API on Monday mornings. A production-grade system needs to handle the full lifecycle. 1306 1307### Continuous Data Collection 1308 1309Instead of pulling data once a week, an automated system queries the relevant Meraki API endpoints on a continuous or near-continuous basis. Client connection events, Air Marshal rogue detections, splash page authentication logs, and content filtering status are all captured as they occur and stored in a centralized data layer. 1310 1311This means your compliance record reflects every event, not just the ones that happened to be visible when someone manually checked. 1312 1313### Intelligent Report Generation 1314 1315Raw API data is not a compliance report. Automated generation means transforming thousands of individual data points into structured, human-readable documents that match your compliance framework's requirements: 1316 1317- Executive summaries with key metrics (total guest connections, average session duration, rogue SSIDs detected and remediated) 1318- Detailed appendices with full client logs for audit trail purposes
1319- Trend analysis comparing the current period to historical baselines 1320- Exception reporting that highlights anomalies requiring human review 1321 1322### Automated Delivery 1323 1324Reports should arrive in the compliance team's inbox at the same time every week, formatted and ready for review. No one should need to request them, chase them, or remind anyone to create them. The workflow should support multiple delivery channels: email, shared drives, ticketing systems, or compliance platforms. 1325 1326### Audit-Ready Archival 1327 1328Every generated report needs to be stored in an immutable, timestamped archive. When an auditor asks for the guest Wi-Fi compliance report from the third week of October two years ago, you need to produce it in seconds, not hours. 1329 1330## Where AI Adds Genuine Value 1331 1332The most advanced automated compliance platforms do not just collect and format data. They analyze it. AI-powered systems can identify patterns that human reviewers would miss in weekly manual scans. 1333 1334For example, an AI agent can detect that a specific rogue SSID appears at the same property every Thursday evening, suggesting a recurring unauthorized hotspot rather than a random event. Or it can flag that guest session durations at one property are three times the average, which could indicate network misuse or a misconfigured splash page policy. 1335 1336This kind of semantic analysis transforms compliance reporting from a checkbox exercise into genuine security intelligence. 1337 1338## Building This with the Meraki API 1339 1340The Meraki Dashboard API provides the building blocks. The \`/networks/{networkId}/wireless/clients\` endpoint gives you client connection data. The \`/networks/{networkId}/wireless/airMarshal\` endpoint surfaces rogue SSID detections. Splash page logs and content filtering data are available through their respective endpoints. 1341 1342The engineering challenge is orchestrating these across multiple networks, handling API rate limits, normalizing the data, and building the report generation and delivery pipeline. For organizations with the development resources, this is achievable but represents a significant ongoing maintenance commitment. 1343 1344For teams that need this capability without building and maintaining custom infrastructure, Selent automates the entire workflow end to end. As a Cisco Meraki Technology Partner, Selent connects directly to your Meraki environment, continuously collects compliance-relevant data across all your networks, and delivers formatted, audit-ready reports on whatever schedule your compliance team requires â without anyone touching a dashboard. 1345 1346## Reclaiming Six Hours Every Week 1347 1348The math is simple. Six hours per week of manual compliance work is 312 hours per year â nearly eight full work weeks dedicated to copying data from one screen into another. For hospitality groups, school districts, and any organization with guest Wi-Fi obligations, automating this process does not just save time. It produces better, more complete, and more reliable compliance documentation than manual collection ever could. 1349 1350If your team is still pulling Meraki compliance reports by hand, [explore what Selent's intelligent automated compliance reporting can do for you](https://www.selent.ai). 1351`},{slug:"how-to-build-real-time-bandwidth-monitoring-dashboard-cisco-meraki",title:"How to Build a Real-Time Bandwidth Monitoring Dashboard for Cisco Meraki MX Appliances",excerpt:"Manual site-by-site checks are a thing of the past. Learn how to get live bandwidth visibility across all your Meraki MX locations in a single pane, with automated alerts before users ever notice a problem.",date:"2026-03-04",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Network Operations",tags:["Cisco Meraki","Bandwidth Monitoring","MX Appliance","Network Automation","Real-Time Dashboard","Multi-Site","Meraki API","AIOps"],coverImage:"https://images.unsplash.com/photo-1551288049-bebda4e38f71?ixlib=rb-4.0.3&auto=format&fit=crop&w=2340&q=80",featured:!1,draft:!1,readTime:"7 min",content:` 1352If you manage a Cisco Meraki network across more than a handful of sites, you already know the pain. You open the Meraki dashboard, click into one location, check the MX appliance, glance at the uplink utilization graph, then click back, select the next site, and do it all over again. For a retail chain with 40 locations, that routine alone can consume an hour of your morning before you have identified a single problem. 1353 1354The real question is not whether you need better visibility. It is how you get live, actionable bandwidth data from every MX appliance onto one screen, with alerts that fire before your users start calling. 1355 1356This guide walks through the problem, the architecture, and the practical steps to build a real-time bandwidth monitoring dashboard for multi-site Meraki deployments. 1357 1358## Why the Native Meraki Dashboard Falls Short for Multi-Site Monitoring 1359 1360The Meraki dashboard is a powerful tool for managing individual networks. But it was designed as an administrative console, not an operations center. When you are responsible for dozens or hundreds of sites, several limitations become painful quickly. 1361 1362**No single-pane view across organizations or networks.** You cannot see bandwidth utilization for all 40 retail stores on one screen. Each network requires its own navigation path, its own page load, its own mental context switch. 1363 1364**Historical data, not real-time data.** The built-in graphs typically show data on a five-minute aggregation cycle. That is adequate for capacity planning but useless when a link is saturating right now and your point-of-sale systems are grinding to a halt. 1365 1366**No threshold-based alerting on bandwidth utilization.** Meraki provides alerts for device offline events and certain security triggers, but firing a Slack message the instant an uplink crosses 80 percent utilization is not something you can configure natively. 1367 1368For a multi-site retail operation, where every minute of degraded connectivity translates directly into lost revenue, these gaps are not minor inconveniences. They are operational blind spots. 1369 1370## The Real Cost of Reactive Bandwidth Management 1371 1372Consider what happens when a retail location saturates its WAN link without anyone noticing. The cloud-based POS system slows down. Transaction times double. Lines grow. Customers abandon purchases. A regional manager calls IT two hours later asking why Store 27 had its worst afternoon in a month. 1373 1374The pattern is almost always the same. Nobody knew there was a problem until it became a crisis. The data existed inside Meraki, but no one was watching. 1375 1376Research across the industry shows that network-related downtime and degradation costs mid-size businesses thousands of dollars per minute. Even partial degradation â where the link is not down but is running at 95 percent capacity â chips away at productivity in ways that are hard to quantify but impossible to ignore. 1377 1378## What a Real-Time Monitoring Architecture Looks Like 1379 1380Building a live bandwidth dashboard for Meraki MX appliances requires four
1380components working together. 1381 1382### Data Collection via the Cisco Meraki API 1383 1384The Meraki Dashboard API exposes uplink utilization data through the \`/organizations/{orgId}/appliance/uplink/statuses\` endpoint. By polling this endpoint at a short interval â typically every 30 to 60 seconds â you can capture near-real-time bandwidth consumption for every MX appliance across every network in an organization. 1385 1386For multi-org MSP environments, you repeat this across each organization, aggregating the results into a single data store. 1387 1388### A Persistent Data Layer 1389 1390Raw API responses need to land somewhere queryable. Time-series databases are the natural fit here â optimized for high-frequency writes of timestamped metrics, with fast aggregation queries for graphing and alerting. You want at minimum 30 days of retention at full resolution, giving you the ability to spot trends, compare week-over-week patterns, and investigate historical incidents without losing granularity. 1391 1392### A WebSocket-Driven Frontend 1393 1394Traditional dashboards that refresh on a timer introduce latency and unnecessary load. A WebSocket connection between your backend and a React-based frontend means the dashboard updates the instant new data arrives. No polling, no page refreshes, no stale numbers. 1395 1396Each site appears as a card or row showing current uplink utilization as a percentage, with color coding: green below 60 percent, yellow between 60 and 80 percent, red above 80 percent. The visual is immediate and intuitive â you glance at the screen and know exactly which sites need attention. 1397 1398### Threshold-Based Alerting 1399 1400The final piece is automated alerting. When any MX appliance crosses a configurable threshold â say, 80 percent sustained utilization over a two-minute window â the system fires a notification. Slack, Microsoft Teams, email, PagerDuty, whatever fits your operations workflow. 1401 1402The alert includes the site name, the current utilization percentage, the uplink in question, and a direct link to the relevant Meraki dashboard page for deeper investigation. Context matters when you are triaging at speed. 1403 1404## The Implementation Challenges Most Teams Underestimate 1405 1406On paper, this sounds straightforward. Poll an API, store the data, build a dashboard, send alerts. In practice, several complexities emerge. 1407 1408**API rate limiting.** The Meraki API enforces rate limits that become significant when you are polling dozens of organizations every 30 seconds. You need intelligent request scheduling, retry logic with exponential backoff, and efficient batching to stay within limits without sacrificing freshness. 1409 1410**Data normalization across diverse deployments.** Not every site has the same uplink configuration. Some MX appliances have dual WAN, some have cellular failover, some run in high-availability pairs. Your data model needs to account for all of these variations gracefully. 1411 1412**Alert fatigue.** A naive threshold system will flood your Slack channel during peak hours when utilization naturally spikes. You need intelligent alerting â sustained threshold breaches, not momentary spikes â with suppression windows, escalation paths, and acknowledgment workflows. 1413 1414**Maintenance and drift.** New sites get added. Old sites get decommissioned. Uplink configurations change. A monitoring system that requires manual updates every time the network changes will rot within months. 1415 1416These are the engineering problems that separate a weekend prototype from a production-grade operations tool. 1417 1418## How Automation and AI Transform the Approach 1419 1420Modern network automation platforms have made this category of problem significantly more tractable. Instead of building and maintaining custom scripts, API integrations, and dashboard infrastructure, intelligent platforms can connect directly to the Meraki API, discover your entire network topology automatically, and begin surfacing real-time utilization data within minutes. 1421 1422The most advanced approaches use AI agents that do not just display data but interpret it. They can identify that a specific site's bandwidth spike coincides with a new digital signage deployment, or that three locations are trending toward saturation based on week-over-week growth patterns â surfacing warnings before a crisis happens. 1423 1424Selent, as a Cisco Meraki Technology Partner, takes this approach by connecting directly to your Meraki environment and providing a unified operations view across all your sites. Its AI-powered analysis goes beyond raw metrics to surface actionable insights, identifying which sites need uplink upgrades before they become problems rather than after. 1425 1426## Moving from Reactive to Proactive Network Operations 1427 1428The shift from manually checking 40 Meraki dashboards to having a single real-time view with intelligent alerting is not just a time savings. It fundamentally changes the operating model. Your team stops reacting to user complaints and starts preventing issues before they impact the business. 1429 1430For multi-site retail, that means fewer lost transactions. For MSPs, it means better SLA compliance and happier clients. For any organization running Meraki at scale, it means the network team finally has the visibility they deserve. 1431 1432If you are managing Meraki MX appliances across multiple sites and still relying on manual dashboard checks, [explore how Selent can give you real-time visibility, intelligent alerting, and AI-powered insights](https://www.selent.ai) across your entire network from a single pane of glass. 1433`},{slug:"selent-evolves-first-ai-builds-anything-cisco-networking",title:"Selent Evolves: Introducing the First AI That Builds Anything on Cisco Networking",excerpt:"For the first time in the Cisco ecosystem, AI agents comb
1433ined with networking experts can design, build, and deliver any custom solution you need â in days, not months. Starting with Meraki today, Catalyst coming soon.",date:"2026-03-03",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Network Operations",tags:["Cisco Meraki","Cisco Catalyst","AI Agents","Network Automation","AIOps","Solution Builder","Enterprise IT","Cisco Networking"],coverImage:"https://images.unsplash.com/photo-1677442135703-1787eea5ce01?ixlib=rb-4.0.3&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"8 min",content:` 1434For years, you've known your Cisco network could do more. You've seen the potential sitting right there â in the APIs, in the data, in the platform's flexibility â and you've watched it go unrealized. Not because the technology wasn't capable, but because turning that potential into real, working solutions required too much time, too much money, and too much specialized talent. 1435 1436That era is over. 1437 1438We're introducing the first AI-powered solution builder designed for the entire Cisco networking portfolio â and it changes everything about what's possible with your network. This isn't an incremental improvement. This isn't another dashboard plugin or a new integration template. This is a fundamentally new way to extract value from your network infrastructure, powered by agentic AI that can design, build, and deliver *any* custom solution you've ever wanted. 1439 1440The automation script you've been meaning to build for two years? Done in days. The compliance reporting tool your auditor keeps asking about? Built and running before your next review. The custom dashboard your NOC team has been begging for? Delivered before the end of the week. That integration between your network platform and your ITSM system that "nobody has time for"? Consider it handled. 1441 1442**Every project you've postponed. Every tool you wished existed. Every workflow you've been doing manually because the custom solution was too expensive or too slow to build. All of it is now within reach.** 1443 1444## A First for Cisco Networking 1445 1446Let's be clear about what's happening here: nothing like this has ever existed in the Cisco networking ecosystem. There has never been a platform where you could simply describe what you need â in plain language, no technical specs required â and have AI agents combined with networking experts deliver a working, production-ready solution within days. 1447 1448Not weeks. Not months. Days. 1449 1450Think about what that means for your organization. Your network stops being just infrastru
1450cture and starts becoming a direct driver of business outcomes. The gap between "what our network could do" and "what our network actually does for us" effectively disappears. 1451 1452Want automation scripts that handle bulk provisioning, config templates, and scheduled changes across every site? You can have that. Need analytics dashboards with real-time metrics, traffic analysis, and historical trends customized to exactly how your team operates? You can have that. Looking for purpose-built control UIs with role-based access so your help desk can take action without full admin privileges? You can have that too. Compliance tools for PCI DSS, HIPAA, or SOC 2 that run automated checks and generate audit-ready reports? Absolutely. Custom integrations with ServiceNow, Splunk, your identity provider, or any other system in your stack? Yes. AI-powered monitoring with anomaly detection and automated incident response running 24/7? All of it. 1453 1454Whatever you need from your Cisco network â and we mean *whatever* â it can be built, tailored to your environment, and delivered at a speed that would have been unthinkable six months ago. 1455 1456## The Roadmap: Two Phases, One Vision 1457 1458We're rolling this out in two phases because we believe in doing things right â and because each platform in the Cisco networking portfolio deserves deep, specialized expertise built into every solution. 1459 1460### Phase 1: Cisco Meraki â Available Now 1461 1462We're launching with full support for Cisco Meraki. This is where it starts. Meraki's cloud-first ar
1462chitecture and robust API make it the perfect launchpad for AI-powered solution building. From day one, our AI agents can build anything on top of your Meraki environment: 1463 1464- **Automation scripts** leveraging the Meraki API and webhooks 1465- **Real-time analytics dashboards** with custom metrics and views 1466- **Custom control UIs** with role-based access for every team 1467- **Compliance and audit tools** for PCI DSS, HIPAA, SOC 2, and more 1468- **Integrations** with your entire tech stack â ServiceNow, Splunk, and beyond 1469- **Intelligent monitoring** with anomaly detection and automated incident response 1470 1471If you run Meraki, the future is here today. Describe what you need and our AI agents start building within hours. 1472 1473### Phase 2: Cisco Catalyst â Coming Soon 1474 1475Catalyst is next. We're extending the same AI-powered building capabilities to the Cisco Catalyst portfolio â bringing the same speed, the same flexibility, and the same "describe it and we build it" experience to campus, branch, and data center environments running Catalyst infrastructure. 1476 1477Whether you're managing Catalyst switches, wireless controllers, or SD-WAN, phase 2 will unlock the same limitless potential: custom automation, analytics, c
1477ompliance, integrations, and monitoring â all built by AI agents with deep Catalyst expertise. 1478 1479**And for organizations running both Meraki and Catalyst?** That's where it gets really powerful. Unified solutions that span your entire Cisco networking estate, built as one cohesive system instead of siloed tools for each platform. One vision, one experience, full coverage. 1480 1481## Why This Matters Right Now 1482 1483The timing isn't accidental. Three forces are colliding that make this moment critical. 1484 1485First, **networks have never been more central to business operations.** Every digital initiative, every cloud migration, every remote work policy, every IoT deployment â they all run through your network. When the network underperforms or can't adapt, the entire business feels it. 1486 1487Second, **IT teams are stretched thinner than ever.** You're being asked to manage more complexity with the same headcount, deliver faster results with fewer resources, and somehow still find time for strategic projects that move the business forward. The backlog of "things we should build" keeps growing, and it never shrinks. 1488 1489Third â and this is the big one â **agentic AI has reached the point where it can genuinely do the work.** Not generate suggestions. Not create templates you still need to customize for weeks. Actually build production-ready solutions, guided by deep Cisco networking expertise, at a fraction of the time and cost of traditional development. 1490 1491These three forces together create a window of opportunity that didn't exist before. Organizations that move now won't just save time â they'll fundamentally change what their network delivers for the business. Those that wait will keep managing the same backlog, manually running the same processes, and leaving the same value on the table. 1492 1493The economics have shifted. The technology is ready. The only question is whether you'll be among the first to take advantage of it. 1494 1495## How It Works 1496 1497We designed the process to be as simple as the results are powerful. 1498 1499**Step one: describe your project.** Tell us what you need. Use plain language â you don't need a requirements document, a technical brief, or an RFP. Just describe the problem you want to solve or the tool you wish you had. "I need a way to bulk-update SSIDs across 200 sites without doing it manually." "I want a dashboard that shows me client health across all our branches in one view." "We need automated PCI compliance checks that run weekly and generate a report." That's all it takes. 1500 1501**Step two: AI agents analyze and build.** Within hours, our agentic AI breaks down your request, maps out the best technical approach, and starts building. Cisco networking experts guide the entire process, ensuring the solution follows platform best practices and works reliably in production. This isn't a chatbot giving you code snippets to figure out on your own â this is a full build, end to end. 1502 1503**Step three: you get a working solution.** Not a proposal. Not a statement of work. Not an estimate. A working solution, built for your network, ready to deploy. In days, not months. 1504 1505That's it. No lengthy procurement cycles. No six-month project timelines. No scope creep. You describe what you need, and you get it built. 1506 1507## Your Network Will Never Be the Same 1508 1509Every network admin has a list. A mental (or actual) list of projects that would make their network smarter, their team more efficient, and their business more agile. Projects that got deprioritized quarter after quarter because the resources weren't there or the ROI was hard to justify against the development cost. 1510 1511That list is no longer aspirational. It's actionable. 1512 1513For the first time, the full potential of your Cisco network is genuinely accessible â not in theory, not in a roadmap, but right now with Meraki, and very soon with Catalyst. The solutions you've been imagining can exist in your environment, built for your team, running on your network, delivering the outcomes your business actually needs. 1514 1515**Describe your first project today.** Our AI agents will analyze your request within hours â and you'll see for yourself why this changes everything. 1516 1517--- 1518 1519*Your network has always had the potential. Now it has the power to deliver. Meraki today. Catalyst tomorrow. No limits.* 1520`},{slug:"network-scaling-operations-model-cisco-meraki",title:"Your Network Is Scaling, Is Your Operations Model Scaling With It?",excerpt:"Enterprise networks are growing faster than ever with more branches, cloud apps, and IoT devices. But most operations models haven't kept pace. Learn why operational intelligence is the key to
1520scaling Cisco Meraki environments with confidence.",date:"2026-02-13",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Network Operations",tags:["Cisco Meraki","Network Scaling","AIOps","Configuration Management","Compliance","Network Automation","Enterprise IT","Operational Intelligence"],coverImage:"https://images.unsplash.com/photo-1451187580459-43490279c0fa?ixlib=rb-4.0.3&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"3 min",content:` 1521Over the last five years, enterprise networks have transformed. More branches. More cloud applications. More remote users. More IoT devices. More constant configuration changes. 1522 1523But here's the uncomfortable truth: **most network operations models haven't evolved at the same pace.** 1524 1525## The Real Bottleneck Isn't Hardware, It's Operations 1526 1527Cisco Meraki makes network deployment easier than ever. You can roll out: 1528 1529- New branches in hours 1530- SD-WAN across regions 1531- Secure Wi-Fi across hundreds of sites 1532 1533But operational maturity is where many organizations fall behind. Questions we hear often: 1534 1535- Who approved that configuration change? 1536- When was the last backup taken? 1537- Why does this site look different from the standard template? 1538- Can we restore last week's working version, right now? 1539 1540When growth accelerates, manual processes become invisible risks. 1541 1542## Change Velocity Is the New Risk Surface 1543 1544Modern networks don't just grow, they change constantly. Firewall rules get updated, VLANs get modified, SSIDs are adjusted, VPN peers are added, and admin permissions evolve. 1545 1546Every change increases entropy. Without automated visibility and guardrails, **configuration drift becomes inevitable.** 1547 1548And drift leads to: 1549 1550- **Security gaps** that expose the organization to threats 1551- **Compliance exposure** across regulatory frameworks 1552- **Inconsistent performance** between sites 1553- **Hard-to-troubleshoot outages** that drain engineering time 1554 1555The problem isn't change. The problem is unmanaged change. 1556 1557## Operational Intelligence Over Manual Oversight 1558 1559No team, no matter how talented, can manually track every configuration change across dozens or hundreds of sites. What's required is operational intelligence: 1560 1561- **Automated configuration snapshots** captured continuously 1562- **Continuous drift detection** across all managed networks 1563- **Structured change auditing** with full accountability trails 1564- **Instant rollback capabilities** to any previous known-good state 1565- **Historical comparison between versions** for root cause analysis 1566- **Policy validation at scale** to enforce compliance baselines 1567 1568This is where modern AIOps moves from "nice to have" to foundational infrastructure. 1569 1570## Scaling Cisco Meraki Environments With Confidence 1571 1572Selent was designed to help Cisco Meraki-driven organizations operate with confidence at scale. 1573 1574As your network grows, Selent ensures: 1575 1576- **Every configuration is continuously backed up**, with no manual intervention required 1577- **Every change is tracked**, providing complete audit trails for compliance and troubleshooting 1578- **Every deviation is visible**, so drift never goes unnoticed 1579- **Every restore can happen in seconds**, minimizing downtime when issues arise 1580 1581Not because something failed, but because mature operations anticipate complexity before it becomes a problem. 1582 1583## The New Standard for Network Leadership 1584 1585Forward-looking IT leaders are shifting their mindset: 1586 1587- From **reactive troubleshooting** to **proactive resilience** 1588- From **manual control** to **automated governance** 1589- From **visibility gaps** to **continuous operational intelligence** 1590 1591The future of network operations isn't just faster hardware. It's smarter oversight, powered by intelligent automation that scales alongside your infrastructure. 1592 1593## Final Thought 1594 1595If your Cisco Meraki environment is expanding, your operational model must evolve with it. Scaling infrastru
1595cture without scaling operational intelligence is building speed without control. 1596 1597Selent helps modern network teams operate at the pace of growth, without sacrificing stability, security, or compliance. 1598`},{slug:"protect-your-cisco-meraki-networks-before-its-too-late",title:"Protect Your Cisco Meraki Networks Before It's Too Late",excerpt:"A small mistake shouldn't take your whole network down. In modern cloud-managed networks, one click can change everything. Learn why misconfiguration is the leading cause of downtime and how to protect your infrastructure.",date:"2026-02-03",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Network Operations",tags:["Cisco Meraki","Configuration Management","Disaster Recovery","Backup & Restore","Network Security","MSP","Enterprise IT"],coverImage:"https://images.unsplash.com/photo-1558494949-ef010cbdcc31?ixlib=rb-4.0.3&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"3 min",content:` 1599**A small mistake shouldn't take your whole network down.** 1600 1601In modern cloud-managed networks, one click can change everything. 1602 1603A VLAN edit. A firewall rule update. A template push to hundreds of sites. 1604 1605And suddenly: 1606 1607- Stores lose connectivity 1608- APs go offline 1609- VPNs break 1610- Teams can't process payments or access systems 1611 1612If you run distributed infrastructure â retail branches, campuses, clinics, warehouses, or MSP-managed customers â you already know: 1613 1614**Downtime doesn't come from hardware failures anymore. It comes from misconfiguration.** 1615 1616That's exactly why we built Selent. 1617 1618## The Hidden Risk in Cloud-Managed Networking 1619 1620Cloud-managed platforms like Meraki are incredibly powerful. But that power also increases blast radius. 1621 1622When you: 1623 1624- Push templates 1625- Bulk edit policies 1626- Automate changes 1627- Manage hundreds or thousands of devices 1628 1629A single wrong change can propagate everywhere in seconds. 1630 1631And here's the uncomfortable truth: 1632 1633**Meraki doesn't provide instant, full, point-in-time configuration restore out of the box.** 1634 1635So teams end up: 1636 1637- Manually rebuilding configs 1638- Searching through change logs 1639- Copying settings from memory 1640- Opening urgent support cases 1641 1642All while the business is down. 1643 1644## What Actually Causes Most Outages? 1645 1646From what we see across MSPs and enterprise IT teams, incidents usually come from: 1647 1648### 1. Human Error 1649 1650- Wrong VLAN 1651- Wrong template 1652- Wrong network selected 1653- Wrong time 1654 1655### 2. Untracked Changes 1656 1657- No one knows who changed what 1658- No baseline 1659- No audit trail 1660- No rollback 1661 1662### 3. No Fast Recovery 1663 1664Even if you know the issue, restoring takes: 1665 1666- Screenshots 1667- Exports 1668- Manual rebuilds 1669- Hours of effort 1670 1671**Minutes of mistake â hours of downtime.** 1672 1673## The Safer Way to Run Meraki 1674 1675Selent was built specifically to protect Meraki operations from this exact problem. 1676 1677With Selent you get: 1678 1679### Automated Backups 1680 1681Continuous, scheduled snapshots of: 1682 1683- Networks 1684- Devices 1685- Policies 1686- Templates 1687- Org-level configs 1688 1689Always ready. No manual exports. 1690 1691### Change Auditing 1692 1693Know exactly: 1694 1695- What changed 1696- Who changed it 1697- When it changed 1698- What the previous value was 1699 1700Perfect for troubleshooting and compliance. 1701 1702### One-Click Restore 1703 1704Break something? Roll back instantly. 1705 1706Not hours. **Seconds.** 1707 1708### Safer Operations at Scale 1709 1710Push changes confidently across: 1711 1712- Hundreds of stores 1713- Campuses 1714- Distributed branches 1715- MSP customers 1716 1717Because rollback is always available. 1718 1719## Real-World Scenarios We Protect Against 1720 1721**Retail chain** 1722Template push breaks POS connectivity â Restore last known good state in seconds. 1723 1724**MSP managing 50+ clients** 1725Engineer misapplies firewall rule â Rollback only that network instantly. 1726 1727**Enterprise IT** 1728Audit request for "who changed security policy?" â Full change history available. 1729 1730**Compliance teams** 1731Need proof of configuration control â Automatic logs + backups. 1732 1733## The Cost of Waiting 1734 1735Most teams think: *"We'll set up backups later."* 1736 1737Until the day: 1738 1739- A junior engineer pushes the wrong template 1740- A late-night change goes wrong 1741- Or an attacker modifies configs 1742 1743And recovery takes hours. 1744 1745**If each hour of downtime costs thousands (or millions), why risk it?** 1746 1747Backups and fast restore shouldn't be optional. They should be standard. 1748 1749## Final Thought 1750 1751Your network is now software. And software needs version control and rollback. Just like code. 1752 1753If you wouldn't deploy production software without backups and Git history⦠1754 1755**Why do it with your network?** 1756 1757--- 1758 1759## Protect Your Meraki Before the Next Mistake Happens 1760 1761Selent gives you: 1762 1763- Backup 1764- Audit 1765- Restore 1766- Confidence 1767 1768So a small change never becomes a big outage. 1769 1770Learn more or request a demo at [selent.ai](https://www.selent.ai) 1771 1772--- 1773 1774**#CiscoMeraki #NetworkBackup #ConfigurationManagement #DisasterRecovery #MSP #EnterpriseIT #SelentAI** 1775`},{slug:"year-networks-cannot-afford-to-fail",title:"2026: The Year Networks Can No Longer Afford to Fail",excerpt:"Network reliability is now a core business risk. Over 60% of outages are human-caused, and recovery depen
1775ds on proper backups. Discover why 2026 must be the year of network recovery automation and how to move from fragile to recoverable infrastructure.",date:"2026-01-26",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Network Operations",tags:["Network Reliability","Configuration Management","Disaster Recovery","Backup & Restore","AIOps","Compliance","Network Automation"],coverImage:"/network-node-splitting.png",featured:!0,draft:!1,readTime:"3 min",content:` 1776As we start 2026, one thing is clear: **network reliability is no longer just an IT concern. It is a core business risk.** 1777 1778Every digital service, every transaction, every user experience depends on a network that is not only available, but also correctly configured and recoverable. And yet, most network outages today are not caused by hardware failures or cyber-attacks. They are caused by something far more basic: 1779 1780**Misconfiguration and lack of proper backups.** 1781 1782This is the uncomfortable truth many organizations still underestimate. 1783 1784## Downtime Is No Longer an Exception. It's a Pattern. 1785 1786Industry studies consistently show that: 1787 1788- **Over 60% of network incidents** are human-related 1789- **Configuration mistakes** are the #1 cause of major outages 1790- **Recovery times** are directly correlated to whether a clean configuration backup exists 1791 1792A single wrong VLAN, firewall rule, routing policy, or SSID change can: 1793 1794- Disconnect thousands of users 1795- Stop point-of-sale systems 1796- Break remote access 1797- Violate compliance requirements 1798- Cause reputational and financial damage in minutes 1799 1800And when there is no recent, verified backup, recovery becomes slow, manual, and risky. 1801 1802**At that point, you're not restoring. You're rebuilding under pressure.** 1803 1804## The Illusion of Safety: "We Can Reconfigure It" 1805 1806Many teams still rely on: 1807 1808- Manual exports 1809- Ad-hoc scripts 1810- Engineers' laptops 1811- Memory and tribal knowledge 1812 1813This creates a false sense of security. 1814 1815In real incidents: 1816 1817- The person who made the change may not be available 1818- The last "known good" configuration may not exist 1819- Documentation is often outdated 1820- Rebuilding from scratch introduces new errors 1821 1822**Without automated, versioned, and restorable backups, your network is effectively uninsured.** 1823 1824## Backups Are Not Optional. They Are Part of Availability. 1825 1826In 2026, availability means more than uptime. It means: 1827 1828- The ability to **roll back instantly** 1829- The ability to **compare configurations semantically** 1830- The ability to **detect risky changes** before they break production 1831- The ability to **recover without human panic** 1832 1833**A network without backup is not resilient. It is fragile.** 1834 1835## Compliance and Audit Risk 1836 1837For regulated industries (finance, healthcare, retail, education, government), configuration backups are not only operational protection. They are also: 1838 1839- Evidence of control 1840- Proof of change tracking 1841- A requirement for many security frameworks 1842 1843No backup strategy means: 1844 1845- No real compliance posture 1846- No defensible incident recovery process 1847- No reliable audit trail 1848 1849## 2026 Must Be the Year of Network Recovery Automation 1850 1851This is where the industry is heading: 1852 1853**Not just monitoring. Not just alerting. But automated recovery and configuration intelligence.** 1854 1855Networks must become: 1856 1857- **Self-documenting** 1858- **Versioned** 1859- **Diff-aware** 1860- **Restorable in seconds, not hours** 1861 1862This is the foundation for AIOps. Without backups, AI has nothing safe to operate on. 1863 1864## Why This Matters to Selent 1865 1866At Selent, our entire platform starts from a simple principle: 1867 1868> **You cannot automate what you cannot safely restore.** 1869 1870Before AI agents can analyze, predict, and remediate, your network must be: 1871 1872- Backed up 1873- Versioned 1874- Traceable 1875- Recoverable 1876 1877**Secure Backup & Restore is not a feature. It is the base layer of network autonomy.** 1878 1879## 2026 Is the Reset Button 1880 1881This year, network teams will have to answer one question honestly: 1882 1883> *"If our entire network misconfigures right now... How fast can we be back?"* 1884 1885If the answer is not: 1886 1887- **Minutes** 1888- **Automated** 1889- **Deterministic** 1890 1891Then your biggest risk is not downtime. **It's false confidence.** 1892 1893--- 1894 1895**Let 2026 be the year networks stop being fragile and start being recoverable.** 1896 1897Learn more at [www.selent.ai](https://www.selent.ai) 1898 1899--- 1900 1901**#NetworkResilience #BackupAndRestore #NetworkAutomation #AIOps #SelentAI #ConfigurationManagement #DisasterRecovery** 1902`},{slug:"network-automation-mcp-essential-ai-enterprise",title:"Why Network Automation + MCP Is Now Essential for AI-Driven Enterprise Operations",excerpt:"Discover why AI alone doesn't fix operational complexity â automation does. Learn how a Management & Control Platform (MCP) enables enterprises to move from reactive firefighting to proactive, AI-driven network operations with safe, closed-loop automation.",date:"2025-12-08",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Network Operations",tags:["Enterprise Networking","Network Automation","MCP","AIOps","AI Agents","Cisco","Configuration Management","Compliance"],coverImage:"/network-automation-mcp-ai-enterprise.png",featured:!0,draft:!1,readTime:"5 min",content:` 1903The enterprise network has never been more critical â or more complex. Hybrid work, SaaS expansion, multi-branch operations, IoT devices, and cloud adoption have all multiplied the mov
1903ing parts. Yet most IT teams are still expected to support more users, more devices, and stricter SLAs with roughly the same headcount. 1904 1905This is exactly why analysts keep stressing the need for automation and AI-driven operations: 1906 1907- **The network automation market** is expected to grow more than 4Ã over the next decade as enterprises shift from manual operations to intent-based, automated models 1908- **The AIOps platform market** is projected to double by 2030 as companies rely on AI to sift through telemetry and automate incident response 1909- **Downtime continues to cost businesses** between $5,600 and $9,000 per minute, depending on the industry, according to Gartner and other enterprise surveys 1910 1911The message is clear: AI alone doesn't fix operational complexity â automation does. And automation is only reliable when it's powered by a strong, centralized Management & Control Platform (MCP). 1912 1913## Why AI Without Automation Fails Inside the Enterprise 1914 1915Most enterprise IT teams already have a pile of tools: 1916 1917- Monitoring platforms 1918- Endpoint and network analytics 1919- Dashboards and alerts everywhere 1920- Some in-house scripts 1921 1922AI is often added as another layer â anomaly detection, predictive alerts, chat-based troubleshooting. The problem? If the network itself is still manually operated, AI becomes advisory instead of transformative. 1923 1924This leads to: 1925 1926- AI surfacing issues with no safe way to auto-fix them 1927- Alerts predicting failures but no automated enforcement of best practices 1928- Insight-rich dashboards that still require manual triage and manual changes 1929 1930Enterprises quickly realize the bottleneck isn't visibility â it's actionability. The network needs a consistent, programmable control plane before AI can close the loop. 1931 1932## What an MCP Means for the Modern Enterprise 1933 1934A Management & Control Platform is not another monitoring tool; it is the automation and governance layer that connects visibility with action. 1935 1936### 1. A Unified Abstraction Layer 1937 1938Different sites, different device models, different settings â but IT needs a single operating model. 1939 1940An MCP normalizes: 1941 1942- Configurations 1943- Telemetry 1944- Policies 1945- Topology 1946 1947Across vendors and technologies. 1948 1949### 2. Policy-Based Network Governance 1950 1951Instead of making changes manually device by device, enterprises define intent: 1952 1953- "Guest WiFi must be isolated across all subsidiaries." 1954- "All switches must enforce our standard security baseline." 1955- "No site should drift from the approved configuration." 1956 1957The MCP turns this intent into enforceable, automated actions. 1958 1959### 3. Clean Telemetry for AI 1960 1961AI is only as good as the data it receives. 1962 1963An MCP provides: 1964 1965- Correlated events 1966- Live configuration diffs 1967- Topology awareness 1968- Historical baselines 1969 1970This allows AI agents to reason with real context, not raw noise. 1971 1972### 4. Safe Execution + Guardrails 1973 1974Automation must be safe: 1975 1976- Dry-run simulation 1977- Blast radius control 1978- Rollback procedures 1979- Approval workflows 1980 1981This lets enterprises adopt automation confidently, without fear of widespread outages. 1982 1983## How MCP + AI Elevates Enterprise Operations 1984 1985### 1. Smarter, Contextual Monitoring 1986 1987Traditional monitoring throws alerts; AI reduces noise â but with MCP backend data, AI becomes truly contextual: 1988 1989- What changed before an incident? 1990- Is this issue isolated or systemic? 1991- Is this a configuration drift or a hardware failure? 1992- How has this site behaved historically? 1993 1994This moves IT from reactive firefighting to proactive stability. 1995 1996### 2. Fast, Controlled Remediation 1997 1998With standardized automation workflows, enterprises can: 1999 2000- Auto-resolve low-risk issues 2001- Give AI agents the ability to propose safe changes 2002- Roll back bad configs instantly 2003- Enforce baselines across hundreds or thousands of devices 2004 2005The result is shorter MTTR and more predictable network performance. 2006 2007### 3. Continuous Improvement Through AI Insights 2008 2009AI can analyze patterns across the enterprise: 2010 2011- Which configurations correlate with fewer incidents? 2012- Which sites are drifting most often? 2013- What improvements can be standardized globally? 2014 2015Combined with automation, IT can push recommended improvements reliably and safely. 2016 2017### 4. Proactive, Business-Level Resilience 2018 2019The real goal is preventing outages long before they affect operations. 2020 2021With MCP + AI, enterprises can: 2022 2023- Predict link saturation before users notice 2024- Detect misconfigurations that increase security risk
2025- Enforce compliance automatically 2026- Simulate configuration changes before rollout 2027 2028This strengthens operational resilience and reduces costly downtime. 2029 2030## Why MCP Is Becoming a Strategic Priority for Enterprises 2031 2032Enterprises adopting MCPs gain: 2033 2034- **Stronger security and compliance** through enforced baselines 2035- **Faster branch/site deployment** and replication 2036- **Drastically shorter troubleshooting cycles** 2037- **More stable user experience** 2038- **A platform where AI can take real action**, not just provide advice 2039 2040As networks become more distributed, MCP becomes the "digital nervous system" that ties everything together. 2041 2042## How Selent MCP Goes Beyond the Basic Approach 2043 2044Selent MCP was built as a native, fully integrated automation and AI orchestration layer for Cisco-centric networks, giving enterprise IT teams the power to enforce compliance, automate safely, and act proactively at scale. 2045 2046Unlike traditional monitoring tools, Selent MCP normalizes telemetry, configurations, and policies so AI agents can reason and execute with real context. With closed-loop automation, deep Cisco integration, and a dynamic architecture designed for specialized AI agents, Selent moves enterprises from reactive network management to a resilient, self-improving operational model. 2047 2048**Ready to transform your network operations with AI-driven automation?** 2049 2050**Start your 14-day free trial today at [selent.ai](https://www.selent.ai) â no credit card required.** 2051 2052--- 2053 2054**#EnterpriseNetworking #NetworkAutomation #MCP #AIOps #SelentAI #CiscoNetworking #ITOperations** 2055`},{slug:"network-resilience-msp-survival-metric",title:"Network Resilience: Why It's Now an MSP Survival Metric",excerpt:"Discover why network resilience has become a core MSP KPI, practical low-friction strategies to keep networks running, and how automation tools like Selent MCP are helping MSPs scale without burning out their teams.",date:"2025-11-26",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Network Operations",tags:["MSP","Network Resilience","Cisco Meraki","Automation","Configuration Management","Compliance","AIOps"],coverImage:"/network-resilience-msp.png",featured:!0,draft:!1,readTime:"7 min",content:` 2056Network resilience isn't a "nice to have" for Managed Service Providers anymore â it is the business. When networks are down, your clients lose revenue, your helpdesk gets hammered, and your SLAs start ticking like a time bomb. 2057 2058This post explores why resilience should be a core MSP KPI, practical low-friction ways to keep networks running, and how automation is quietly becoming the difference between "we're surviving" and "we're scaling." 2059 2060## Why Network Resilience Is Now an MSP Survival Metric 2061 2062Downtime has always been expensive, but the numbers keep getting uglier: 2063 2064- **Gartner's widely cited estimate** puts the average cost of IT downtime at about $5,600 per minute for larger organizations â over $300K per hour 2065- **Even for smaller businesses**, studies show downtime still costs hundreds of dollars per minute, typically in the $137â$427 per minute range 2066 2067For MSPs, that cost isn't just on the client side. Every outage also hits: 2068 2069- Your support team (more tickets, more escalation) 2070- Your margins (unplanned work, overtime) 2071- Your reputation and renewal rates 2072 2073At the same time, modern environments are far more complex than a single router and a couple of switches. Hybrid work, SaaS, SD-WAN, Wi-Fi everywhere, IoT⦠each new project adds another moving part the MSP is expected to keep "always on." 2074 2075No surprise that in recent surveys of IT and MSP professionals: 2076 2077- **60% of MSPs** report moderate to high burnout 2078- **Tool sprawl and lack of real-time visibility** are cited as major operational pain points 2079 2080Resilience is not just about hardware redundancy. It's about designing operations to cope with mistakes, changes, and surprises â and doing so at scale. 2081 2082## Human Error: Still the #1 Enemy of Uptime 2083
2084Despite all the investment in infrastructure, people and process are still the weakest link: 2085 2086- **The Uptime Institute's outage analysis** shows 66â80% of downtime incidents involve human error in some form 2087- In a more recent report, **nearly 40% of organizations** say they've suffered a major outage caused by human error in just the last three years 2088- **Network-related issues** are now responsible for about 30% of end-to-end IT service outages in data centers 2089 2090For MSPs, that usually looks like: 2091 2092- A rushed configuration change on a Friday afternoon 2093- A cloned site that carried over an old VLAN, ACL, or SSID configuration 2094- A missing or outdated backup when a device fails 2095- "Small" changes made directly in a dashboard without any record or rollback plan 2096 2097This is exactly where automation and standardization can turn resilience from wishful thinking into a repeatable practice. 2098 2099## Simple, High-Leverage Ways MSPs Can Boost Network Resilience 2100 2101You don't need a giant transformation program to move the needle. Here are practical, "easy-win" patterns MSPs can apply across Cisco Meraki and similar environments. 2102 2103### 1. Standardize Configurations with Golden Templates 2104 2105Create golden templates for common topologies: branch offices, retail stores, clinics, warehouses, etc. 2106 2107- Define standard VLANs, SSIDs, firewall rules, QoS, security baselines 2108- Apply them using templates or network cloning, rather than "clicking around" per site 2109- Version these templates, and treat changes like code (review, approve, then roll out) 2110 2111This reduces drift and makes it far less likely that one site has a "special" setting that nobody remembers until it breaks. 2112 2113### 2. Automate Configuration Backups and Versioning 2114 2115It sounds basic, but many networks still don't have complete, automated configuration backups across all devices. 2116 2117For resilience, MSPs should: 2118 2119- Take scheduled backups of every configuration (switches, firewalls, APs, MX, etc.) 2120- Store versions with clear timestamps and change metadata 2121- Make restore workflows "one-click" (or close) for when something goes wrong 2122 2123The key is no heroics during an outage: the restore path should be obvious, tested, and quick. 2124 2125### 3. Use Safe Change Windows and Pre-Change Checks 2126 2127Not every change is equal, but a few safeguards go a long way: 2128 2129- Define standard change windows for higher-risk updates (e.g., firewall rules, core routing) 2130- Run pre-change checks: reachability, redundancy status, basic config linting (e.g., duplicate subnets, conflicting rules) 2131- Have a rollback plan documented for every medium/high-risk change 2132 2133This is how you actively reduce the number of human-error-induced incidents (the majority of downtime). 2134 2135### 4. Clone Networks the Smart Way 2136 2137Cloud-managed platforms like Cisco Meraki make it easy to spin up new sites via cloning and templates â which is a huge win for MSPs managing hundreds of sites. Meraki's own data shows more than 190M connected devices across over 4M active networks globally, all managed from the cloud. 2138 2139To make cloning resilient: 2140 2141- Strip out location-specific parameters (IP ranges, tags, SSIDs, VLANs) into variables 2142- Use scripts or automations to populate those variables safely 2143- Validate new deployments against a checklist before handover 2144 2145### 5. Monitor for Symptoms, Not Just "Up/Down" 2146 2147Ping checks aren't enough. Simple, high-value signals include: 2148 2149- WAN utilization and latency thresholds per site 2150- AP client counts and error rates 2151- Switch port status changes on critical uplinks 2152- Sudden changes in configuration (vs. previous baseline) 2153 2154The trick isn't "more alerts" â it's fewer, better alerts tied to clear runbooks so your NOC knows exactly what to do. 2155 2156### 6. Test Recovery Like You Test Backups 2157 2158Every MSP says, "we have backups." Far fewer can say, "we test restores regularly." 2159 2160Make it part of operations to: 2161 2162- Pick a site or device type regularly 2163- Perform a controlled config restore from backup in a lab or non-critical environment 2164- Adjust runbooks based on what was slow, painful, or unclear 2165 2166This builds real resilience muscle and gives your team confidence when something serious breaks. 2167 2168## Why This Matters Specifically for MSPs 2169 2170MSPs sit at the intersection of risk and trust: 2171 2172- **Clients expect you to "keep things running"** â often without fully understanding the complexity involved 2173- **SLAs and contracts** increasingly reference availability, recovery time, and security expectations 2174- **New regulations and frameworks** (ISO, SOC 2, PCI DSS, HIPAA, etc.) bake resilience, change control, and auditability into what "good" looks like 2175 2176Industry surveys show MSPs are responding by expanding their offerings; one 2024 report found **97% of MSPs plan to add new services**, with a strong focus on security and resilience-related offerings. 2177 2178But adding services without simplifying operations can make things worse: more tools, more dashboards, more ways to make mistakes. Automation and a platform mindset are how MSPs grow revenue without burning out their teams. 2179 2180## How Selent MCP and Automation Tools Help MSPs Build Resilience by Default 2181 2182This is exactly the problem space where Selent is focused â especially for MSPs running large Cisco Meraki estates. 2183 2184A few ways MSPs are using Selent MCP and automation modules today to improve resilience: 2185 2186### Automated Backup & Restore Across Organizations 2187 2188- Continuous, policy-driven backups of Meraki configurations across all networks and devices 2189- Centralized version history so you can quickly see what changed, where, and when 2190- Guided restore workflows to roll back misconfigurations in minutes, not hours 2191 2192### Safer, Repeatable Deployments 2193 2194- Network cloning and switch port mass deployment automated via API instead of manual clicking 2195- Standardized templates applied consistently across dozens or hundreds of sites 2196- Reduced chance of "one-off" mistakes that later cause outages 2197 2198### Config and Compliance Checks Before Things Break 2199 2200- Automated checks for risky or non-standard configurations 2201- Early detection of drift from your golden templates or policy baselines 2202- Support for compliance-oriented views (e.g., segmentation, logging, security settings) to align with frameworks your clients care about 2203 2204### Operational "Co-Pilot" for MSP Engineers 2205 2206- Selent MCP exposes Meraki's API surface through automation-friendly workflows and AI agents
2207- Your team spends less time hunting for data across dashboards and more time acting on insights 2208- Over time, this reduces tool sprawl and gives you a more unified operational layer for Meraki networks 2209 2210**The net result:** fewer outages, faster recoveries, and higher margins per device under management. 2211 2212## Getting Started with Network Resilience 2213 2214If you're an MSP managing Cisco Meraki networks and you want to: 2215 2216- Reduce downtime risk 2217- Standardize operations across many customers and sites 2218- Give your team automation superpowers without writing a full internal platform 2219 2220Then network resilience is the perfect place to start â and Selent MCP is designed to make that journey much easier. 2221 2222**Start your 14-day free trial today at [selent.ai](https://www.selent.ai) â no credit card required.** 2223 2224--- 2225 2226**#MSP #NetworkResilience #CiscoMeraki #NetworkAutomation #AIOps #SelentAI #ITOperations** 2227`},{slug:"hidden-cost-misconfigurations-cisco-meraki",title:"The Hidden Cost of Misconfigurations in Cisco Meraki Networks â and How Selent Prevents Them",excerpt:"Discover how network misconfigurations cause 80% of unplanned outages and cost thousands per minute â and how Selent's AI-powered automation platform protects your Cisco Meraki environment with automated backups, drift detection, and one-click restore capabilities.",date:"2025-11-17",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Network Operations",tags:["Cisco Meraki","Network Security","Configuration Management","AI Automation","Compliance","MSP"],coverImage:"/network-node-splitting.png",featured:!0,draft:!1,readTime:"4 min",content:` 2228In network operations, the smallest mistake can have the biggest impact. For Cisco Meraki administrators managing multiple sites or customers, misconfigurations are one of the most common â and most expensive â sources of downtime, data loss, and compliance risk. 2229 2230## Why Misconfigurations Happen 2231 2232Cisco Meraki's cloud-managed architecture makes it incredibly easy to deploy, modify, and replicate configurations across devices and networks. That same simplicity, however, is what makes organizations vulnerable to human error. 2233 2234Common scenarios include: 2235 2236- A VLAN change in one site that accidentally propagates to others 2237- A firewall rule deleted during maintenance, breaking remote access 2238- A template update that overrides local configurations 2239- An SSID modification that disconnects wireless clients in production 2240 2241In a single-organization deployment, these errors are disruptive. Across dozens or hundreds of networks, they can become catastrophic â affecting thousands of users, customer experiences, and security posture. 2242 2243## The Real Cost of a Misconfiguration 2244 2245When network teams think about "downtime," they often picture hardware failure or ISP outages. But statistically, configuration errors cause more incidents than any other factor. 2246 2247Industry benchmarks estimate that: 2248 2249- **80% of unplanned outages** are caused by misconfigurations 2250- **The average cost of network downtime** exceeds $5,600 per minute for enterprise environments 2251- **Compliance-related incidents** (PCI, ISO, HIPAA) often stem from inconsistent firewall or SSID policies 2252 2253For managed service providers (MSPs) and IT partners, a single misconfiguration can also mean: 2254 2255- Contract penalties for SLA violations 2256- Lost customer trust 2257- Hours of manual rollback â if backups even exist 2258 2259In short: what seems like a small mistake can cost thousands of dollars and reputational damage. 2260 2261## The Visibility Gap in Meraki Operations 2262 2263While Cisco Meraki provides excellent visibility and monitoring through its Dashboard and APIs, there's still a critical gap: **it doesn't natively offer full configuration backup, drift detection, or automated restore across organizations.** 2264 2265For large networks or MSPs managing multiple tenants, this means: 2266 2267- No easy way to compare configurations between networks 2268- No audit trail of what changed and when 2269- No one-click rollback if something goes wrong 2270 2271That's where Selent comes in. 2272 2273## How Selent Prevents and Fixes Misconfigurations 2274 2275Selent is an AI-powered automation platform purpose-built for Cisco Meraki environments. It continuously protects your network from configuration risks through four core capabilities: 2276 2277### 1. Automated Backups 2278 2279Selent automatically captures and versions every Meraki device and network configuration. You always have a secure, encrypted copy to restore from â without manual export or scripting. 2280 2281### 2. AI-Powered Drift Detection 2282 2283Our specialized Selent Agents analyze configuration changes across time and organizations, identifying anomalies or drifts from the desired baseline. The platform uses semantic diff analysis to flag what actually matters â not just line-by-line changes. 2284 2285### 3. One-Click Restore 2286 2287When issues arise, you can instantly revert to a known-good configuration. No more re-creating complex settings manually â just pick a backup snapshot and restore in seconds. 2288 2289### 4. Compliance & Reporting 2290 2291Selent provides audit-ready reports showing who changed what, when, and how it affected compliance policies. Whether you need PCI, ISO, or internal governance alignment, visibility is automatic. 2292 2293## The Result: Operational Resilience 2294 2295With Selent in place, network operations teams and MSPs can: 2296 2297- Detect risky configuration changes before they cause outages 2298- Reduce manual rework and troubleshooting time by up to 70% 2299- Ensure consistent compliance and security across all Meraki environments 2300- Deliver a better, more reliable experience to end users 2301 2302Selent turns what used to be reactive firefighting into proactive protection. 2303 2304## Future-Proofing for Cisco Catalyst 2305 2306While Selent's platform is currently optimized for Cisco Meraki, we're actively extending our AI Agents and MCP Server to supp
2306ort the Cisco Catalyst ecosystem. This unified approach will enable IT teams to manage both cloud-managed and on-premise Cisco devices under a single intelligent automation framework. 2307 2308## Conclusion 2309 2310Network misconfigurations aren't going away â but their impact can be eliminated. With the right automation and AI-driven visibility, you can stop costly errors before they spread and recover from incidents in minutes, not hours. 2311 2312Selent empowers you to do exactly that: **resilient, compliant, and intelligent network operations built for the Cisco Meraki era.** 2313 2314Learn more at [www.selent.ai](https://www.selent.ai) 2315 2316--- 2317 2318**#CiscoMeraki #NetworkAutomation #AIOps #SelentAI #NetworkResilience #CiscoNetworking** 2319`},{slug:"elevating-managed-services-with-ai",title:"Elevating Managed Services with AI: How Selent Transforms Cisco Networking Operations",excerpt:"Discover how Selent's AI-powered automation platform transforms Managed Service Provider operations with intelligent configuration management, compliance automation, and autonomous network operations for Cisco Meraki and Catalyst environments.",date:"2025-11-04",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Product",tags:["MSP","AI","Network Automation","Cisco Meraki","Cisco Catalyst","Compliance","MCP"],coverImage:"/elevating-managed-services-with-ai.png",featured:!0,draft:!1,readTime:"3 min",content:` 2320For Managed Service Providers (MSPs), efficiency, visibility, and automation are no longer optional â they're the foundation of scalable, profitable operations. Yet many MSPs managing Cisco networks still struggle with manual configuration tasks, compliance gaps, and limited recovery options across their customers' environments. 2321 2322That's where Selent makes the difference. Purpose-built for Cisco Networking, Selent is an AI-powered automation platform that redefines how MSPs operate, protect, and scale their Meraki deployments â and soon, Cisco Catalyst environments (currently in development). 2323 2324## From Manual to AI-Driven Network Operations 2325 2326Network engineers spend up to 70% of their time on repetitive configuration tasks, leaving little bandwidth for strategic work. Selent eliminates that friction through intelligent automation, enabling MSPs to: 2327 2328- Automate configuration backups every six hours 2329- Instantly restore any device from a secure snapshot 2330- Understand configuration changes in plain English 2331- Search the entire network using natural language 2332- Continuously audit compliance 2333 2334The result: faster incident recovery, zero configuration drift, and a complete audit trail across every managed organization. 2335 2336## Specialized Agents: Turning Automation into Intelligence 2337 2338Selent's Specialized Agents go beyond automation â they bring true intelligence to managed operations. Designed for MSPs, these agents help ensure performance, compliance, and resilience across multiple customer networks: 2339 2340**Compliance Agent** â Automatically checks configurations against industry standards like HIPAA, PCI-DSS, and ISO 27001. 2341 2342**Network Health Agent** â Monitors network performance, detecting anomalies before they affect end users. 2343 2344**Monitoring Agent** â Tracks critical events and provides AI-based insights for proactive management. 2345 2346With these agents, MSPs can reduce operational overhead, improve SLA
2346s, and deliver a higher standard of service without expanding their support teams. 2347 2348## Selent MCP: The AI Bridge for Cisco Networking 2349 2350At the heart of Selent's innovation is Selent MCP (Model Context Protocol) â an open framework that connects Cisco network operations with modern AI models like Claude or ChatGPT. 2351 2352With MCP, MSPs can develop custom AI agents that understand and act on their network data â from generating compliance reports to automating remediation workflows. MCP turns the Network Operations Center (NOC) into an AI-augmented control hub, capable of learning, reasoning, and responding in real time. 2353 2354## Expanding to Cisco Catalyst (In Progress) 2355 2356While Selent is already transforming Cisco Meraki operations, the next evolution is underway: native support for Cisco Catalyst. This upcoming integration will unify automation, compliance, and AI-driven insights across the broader Cisco Networking ecosystem, allowing MSPs to manage hybrid infrastructures from a single intelligent platform. 2357 2358## Why MSPs Choose Selent 2359 2360Selent was built with MSPs in mind â offering the tools, automation, and intelligence needed to scale efficiently: 2361 2362â 70% faster incident recovery 2363â Zero configuration loss 2364â Instant compliance reporting 2365â 99.9% uptime SLA 2366â Multi-organization visibility and control 2367 2368Whether managing ten or a thousand customers, Selent empowers MSPs to operate with precision, speed, and confidence. 2369 2370## The Future of Cisco Network Operations Is Autonomous 2371 2372The era of manual network management is ending. As automation meets intelligence, MSPs adopting Selent's AI-powered platform â and its open Selent MCP framework â are leading the shift toward autonomous, resilient operations. 2373 2374And with Cisco Catalyst support in progress, Selent is set to unify the full Cisco Networking experience under one powerful, AI-driven roof. 2375 2376ð **Start your 14-day free trial today at selent.ai â no credit card required.** 2377 2378Selent: Smarter. Safer. Automated. 2379`},{slug:"selent-mcp-semantic-search-multi-key",title:"Selent MCP Update: AI-Powered API Discovery and Multi-Customer Management",excerpt:"Learn about Selent's latest MCP update featuring semantic search for API discovery and multi-customer management capabilities for MSPs. Discover how vector-based semantic search and intelligent multi-key support improve network operations workflows.",date:"2025-10-30",author:"Fabian Levinsky",authorImage:"/fabian.jpeg",authorTitle:"Head of Engineering",authorBio:"Fabian is the Head of Engineering at Selent, leading backend systems, AI engineering, and frontend development. With deep expertise in distributed systems and intelligent automation, he architects the core technology that powers Selent's network operations platform.",category:"Technical",tags:["MCP","AI","Network Automation","Cisco Meraki","MSP","SemanticSearch","VectorDatabase","Qdrant"],coverImage:"/mcp-update-blog.png",featured:!0,draft:!1,readTime:"12 min",content:` 2380We're excited to announce a major update to Selent's Model Context Protocol (MCP) server that improves how network teams interact with the Cisco Meraki Dashboard API. This update introduces two new capabilities: **AI-powered semantic search for API endpoint discovery** and **intelligent multi-key support for managing multiple customer organizations**. 2381 2382For Managed Service Providers and network operations teams managing multiple Meraki deployments, these features offer practical improvements to daily workflows. Instead of memorizing API endpoint names or managing separate integration instances for each customer, teams can now use natural language queries and seamless multi-organization context switching�all through a single MCP server instance. 2383 2384This technical deep dive explores how these features work, the architecture that powers them, and the practical benefits for your network operations workflow. 2385 2386## The Challenge: Finding the Right API Endpoint 2387 2388The Cisco Meraki Dashboard API is comprehensive, offering 816+ endpoints across organizations, networks, devices, wireless, switching, security appliances, cameras, and sensors. This breadth is powerful but creates a discovery challenge: how do you quickly find the right endpoint when you need to perform a specific network operation? 2389 2390Traditional approaches relied on keyword-based pattern matching�requiring users to know exact terminology and often returning irrelevant results. If you searched for "device status," you might get endpoints for device uplink status, client device information, or cellular gateway status, with no clear indication of which was most relevant to your intent. 2391 2392For teams managing multiple customer organizations, the challenge was compounded by needing to configure and manage separate API keys, maintain organization-to-key mappings manually, and risk calling endpoints with the wrong API key context. 2393 2394## Semantic Search: Natural Language API Discovery 2395 2396The latest Selent MCP update replaces keyword matching with **vector-based semantic search**. This AI-powered a
2396pproach understands the *meaning* behind your queries, not just the keywords. 2397 2398### How It Works 2399 2400Under the hood, Selent MCP now leverages: 2401 2402- **Qdrant**: A high-performance vector database running locally within the MCP server 2403- **FastEmbed**: An efficient embedding model (BAAI/bge-small-en-v1.5) that converts text into semantic vectors 2404- **Intelligent Scoring**: A multi-factor relevance algorithm that combines vector similarity with contextual boosting 2405 2406When the MCP server starts, it automatically generates embeddings for all 816 Meraki API endpoints, capturing both the method name and description in a searchable vector space. When you submit a query, the system: 2407 24081. Converts your natural language query into a vector representation 24092. Performs similarity search against all indexed endpoints 24103. Applies intelligent boosting for exact matches, term presence, and method simplicity 24114. Returns ranked results with confidence scores 2412 2413### Before and After 2414 2415**Before (Keyword Matching)**: 2416\`\`\` 2417Query: "get device status" 2418Results: Pattern match attempts, possible false positives 2419Relevance: ~30% accuracy rate 2420\`\`\` 2421 2422**After (Semantic Search)**: 2423\`\`\` 2424Query: "get device status" 2425Results: 2426 1. devices.getDevice (score: 0.87) - "Return a single device" 2427 2. devices.getDeviceUplink (score: 0.74) - "Return uplink info for device" 2428 3. devices.getOrganizationDevicesStatuses (score: 0.71) - "List status of all devices" 2429Relevance: ~95% accuracy rate 2430\`\`\` 2431 2432The semantic approach understands that "status" relates to device information endpoints, and intelligently ranks them by relevance to your specific query. 2433 2434### Natural Language Queries 2435 2436The system handles various natural language patterns: 2437 2438- **Direct queries**: "get organizations", "list networks", "show device info" 2439- **Task-based queries**: "check port configuration", "view firewall rules", "monitor client connections" 2440- **Contextual queries**: "device Q2XX-XXXX-XXXX port settings", "network security policies" 2441 2442Each query returns not just endpoint names, but the section (e.g., \`switch\`, \`appliance\`, \`networks\`), method name (e.g., \`getDeviceSwitchPort\`), a description, and parameter requirements�everything you need to understand if it's the right endpoint for your task. 2443 2444### Technical Benefits 2445 24461. **Comprehensive Coverage**: All 816 endpoints are automatically indexed�no manual pattern definitions required 24472. **Maintenance-Free**: As Meraki adds new API endpoints, the collection regeneration script discovers them automatically 24483. **Fast Performance**: Vector search completes in <50ms for typical queries 24494. **Local Execution**: The embedding model (33M parameters) runs locally with minimal overhead 24505. **Low Storage**: The entire indexed collection is just 2-5 MB 2451 2452## Multi-Key Support: Managing Multiple Customer Organizations 2453 2454For Managed Service Providers, a common operational challenge is managing network infrastructure across multiple customer organizations, each with its own Meraki Dashboard API key. Previously, this required running separate MCP server instances or manually switching contexts�both error-prone and inefficient. 2455 2456The new multi-key support feature addresses this workflow challenge by enabling a **single MCP server to manage multiple API keys** and automatically resolve which key to use based on organizational context. 2457 2458### Configuration 2459 2460Setting up multi-key mode is straightforward. Instead of providing a single API key, you provide a comma-separated list: 2461 2462**Simple Configuration** (unnamed keys): 2463\`\`\`bash 2464MERAKI_API_KEY="key1,key2,key3" 2465\`\`\` 2466 2467**Labeled Configuration** (recommended for MSPs): 2468\`\`\`bash 2469MERAKI_API_KEY="customer_a:abc123...,customer_b:def456...,customer_c:ghi789..." 2470\`\`\` 2471 2472The labeled format allows you to assign friendly names to each key, making it easier to identify which key corresponds to which customer in logs and management tools. 2473 2474### Intelligent Key Resolution 2475 2476When you execute an API call that requires organization context, the system automatically determines which API key to use through a priority-based resolution algorithm: 2477 24781. **Explicit Key ID**: If you specify a \`key_id\` parameter, that key is used 24792. **Organization Mapping**: If you provide an \`organizationId\`, the system looks up which key has access to that organization 24803. **Session Default**: If you've set a default key for the current session, it's used 24814. **First Configured Key**: Falls back to the first key in your configuration 2482 2483This intelligent resolution means you can write natural queries like: 2484 2485\`\`\` 2486"Show me all networks in organization 123456" 2487\`\`\` 2488 2489The system automatically determines that organization 123456 belongs to customer_b's API key and routes the request accordingly�no manual key selection required. 2490 2491### Organization Discovery 2492 2493To enable automatic organization-to-key mapping, Selent MCP provides a one-time discovery process: 2494 2495\`\`\`python 2496discover_all_organizations() 2497\`\`\` 2498 2499This tool iterates through all configured API keys, fetches the accessible organizations for each, and builds an internal
2499cache. Once discovery is complete, subsequent API calls can automatically resolve the correct key based on organization ID alone. 2500 2501### New Management Tools 2502 2503The multi-key feature introduces five new MCP tools specifically for key management: 2504 2505- **\`list_api_keys()\`**: View all configured keys with labels and metadata 2506- **\`get_key_organizations(key_id)\`**: List organizations accessible by a specific key 2507- **\`set_default_key(key_id)\`**: Set a default key for the current session 2508- **\`discover_all_organizations()\`**: Populate the organization-to-key cache 2509- **\`find_organization_by_name(name)\`**: Search for an organization across all keys 2510 2511These tools provide complete control over multi-customer workflows while maintaining the simplicity of single-key operation when managing just one organization. 2512 2513## Technical Architecture: Under the Hood 2514 2515Understanding the technical architecture provides insight into how these features are implemented. 2516 2517### Vector Search Infrastructure 2518 2519**Qdrant Vector Database**: The system uses Qdrant as a local vector database, storing endpoint embeddings in a collection structure that supports fast similarity search. The collection persists in \`./data/meraki_api_collection/\`, ensuring the index survives server restarts without regeneration overhead. 2520 2521**FastEmbed Model**: The BAAI/bge-small-en-v1.5 model was chosen for its balance of accuracy and efficiency. At 33 million parameters, it provides strong semantic understanding while remaining lightweight enough to run locally without GPU acceleration. The model is lazy-loaded, minimizing startup time when semantic search isn't immediately needed. 2522 2523**Score Boosting Algorithm**: Raw vector similarity scores are enhanced through contextual boosting: 2524- Exact method name matches: +0.25 boost 2525- Query terms in method name: +0.08 per term 2526- Query terms in section name: +0.04 per term 2527- Method name simplicity: +0.03 for shorter names 2528 2529This multi-factor scoring ensures that while semantic meaning is primary, practical considerations like name simplicity and term presence refine the ranking for better user experience. 2530 2531### Multi-Key Architecture 2532 2533**MerakiMultiClient**: A new client class manages the API key lifecycle. It parses the configuration, instantiates separate Meraki Dashboard API clients for each key, maintains the organization-to-key cache, and provides the resolution logic. 2534 2535**Lazy Tool Registration**: The five key management tools only register with the MCP server when multiple keys are detected. Single-key configurations see no interface changes, maintaining backward compatibility. 2536 2537**Caching Strategy**: Organization lists are cached per API key with a 5-minute TTL, balancing freshness with API rate limit efficiency. The organization-to-key mapping cache persists for the server's lifetime, as these relationships rarely change. 2538 2539### Performance Characteristics 2540 2541- **Semantic Search Latency**: <50ms average query time 2542- **Index Generation Time**: ~30 seconds for 816 endpoints (one-time operation) 2543- **Memory Footprint**: +15MB for Qdrant client and embeddings 2544- **Disk Storage**: 2-5 MB for complete endpoint index 2545- **API Rate Impact**: Minimal�organization discovery is cached, search is local 2546 2547### Docker Deployment 2548 2549The latest update includes enhanced Docker support with a multi-stage build process that reduces image size and improves caching efficiency. Automated publishing ensures \`selentai/selent-mcp:latest\` is always current with the latest features. 2550 2551Deployment is simplified to a single command: 2552 2553\`\`\`bash 2554docker run -d \\ 2555 -e MERAKI_API_KEY="your_key_or_keys" \\ 2556 --name selent-mcp \\ 2557 selentai/selent-mcp:latest 2558\`\`\` 2559 2560For multi-key deployments, simply provide the comma-separated or labeled key format in the environment variable. 2561 2562## Real-World Benefits for MSPs and Network Teams 2563 2564These technical capabilities translate into concrete operational improvements: 2565 2566### For Managed Service Providers 2567 2568**Single-Pane-of-Glass Management**: Instead of maintaining separate MCP server instances or integration setups for each customer, MSPs can deploy one Selent MCP server that intelligently handles all customer contexts. 2569 2570**Reduced Context Switching**: When addressing a customer issue, simply reference their organization ID or name�the system automatically uses the correct API key. No manual key lookup or configuration changes required. 2571 2572**Error Prevention**: Automatic key resolution helps avoid executing API calls with the wrong API key, which can result in 404 errors or accessing the wrong organization's data. 2573 2574**Operational Efficiency**: Batch operations across multiple customers become straightforward�iterate through organizations and let the system handle key resolution automatically. 2575 2576### For Network Engineers 2577 2578**Faster API Discovery**: Instead of searching documentation or memorizing endpoint names, describe what you need in natural language and immediately get the relevant endpoints with confidence scores. 2579 2580**Reduced Cognitive Load**: The semantic search handles the mapping from "what I want to do" to "which API endpoint does it," allowing engineers to focus on network operations rather than API mechanics. 2581 2582**Exploration-Friendly**: When unsure of the exact endpoint, semantic search returns related options, helping engineers discover capabilities they might not have known existed. 2583 2584### For Development Teams 2585 2586**Simplified Integration**: Applications built on Selent MCP inherit both semantic discovery and multi-key management without implementing these features themselves. 2587 2588**Reduced Maintenance**: As the Meraki API evolves, the automatic endpoint indexing means integrations don't need updates to support new endpoints�they're automatically discoverable through semantic search. 2589 2590**Better User Experience**: Applications can expose natural language network operation queries to end users, abstracting away API complexity entirely. 2591 2592### Concrete Use Case: Multi-Customer Incident Response 2593 2594Consider an MSP responding to a network issue across multiple customer sites: 2595 25961. **Discovery**: "Find all organizations with the word 'retail' in their name" � System searches across all API keys 25972. **Assessment**: "Show me device status for organization 123456" � Automatically uses correct key 25983. **Investigation**: "Get firewall rules for network N_abc123" � Routes to appropriate organization's ke
2598y 25994. **Remediation**: Natural language queries guide the engineer to the right API endpoints for making changes 26005. **Verification**: Queries automatically use the correct organizational context throughout 2601 2602This workflow would have previously required manual key management, documentation lookups, and careful context tracking�all now handled automatically. 2603 2604## Getting Started 2605 2606### Deployment 2607 2608Deploy the latest Selent MCP server using Docker: 2609 2610\`\`\`bash 2611# Pull the latest image 2612docker pull selentai/selent-mcp:latest 2613 2614# Single-key deployment 2615docker run -d \\ 2616 -e MERAKI_API_KEY="your_api_key" \\ 2617 --name selent-mcp \\ 2618 selentai/selent-mcp:latest 2619 2620# Multi-key MSP deployment 2621docker run -d \\ 2622 -e MERAKI_API_KEY="customer_a:key1,customer_b:key2,customer_c:key3" \\ 2623 --name selent-mcp \\ 2624 selentai/selent-mcp:latest 2625\`\`\` 2626 2627### Initial Setup 2628 2629After deployment, generate the semantic search collection (one-time operation): 2630 2631\`\`\`bash 2632docker exec selent-mcp python -m selent_mcp.scripts.generate_collection 2633\`\`\` 2634 2635This indexes all Meraki API endpoints and stores the vector embeddings in Qdrant. 2636 2637For multi-key deployments, run organization discovery to enable automatic key resolution: 2638 2639\`\`\`bash 2640# Use the MCP tool through your client 2641discover_all_organizations() 2642\`\`\` 2643 2644### Testing Semantic Search 2645 2646Try natural language queries to explore the semantic search capability: 2647 2648- "get my organizations" 2649- "check device port configuration" 2650- "show network firewall rules" 2651- "list connected clients" 2652 2653Each query returns ranked results with confidence scores, helping you understand which endpoints best match your intent. 2654 2655### Migration from Previous Versions 2656 2657Upgrading from a previous Selent MCP version is straightforward: 2658 26591. Pull the latest Docker image 26602. Restart your container with the same API key configuration 26613. Run the collection generation script once 26624. (Optional) Configure multiple API keys if managing multiple organizations 2663 2664Existing single-key deployments continue to work without configuration changes. The multi-key features and semantic search are additive�they don't alter the behavior of existing API calls or tool invocations. 2665 2666## Conclusion 2667 2668The latest Selent MCP update introduces two meaningful improvements to working with the Cisco Meraki Dashboard API. By combining AI-powered semantic search with multi-organization management, we've added capabilities that make the API more accessible through natural language queries and simplified multi-customer workflows. 2669 2670For Managed Service Providers managing multiple customer networks, the multi-key support reduces the operational overhead of managing separate integration instances. For network engineers, semantic search provides a more efficient way to discover API endpoints without extensive documentation searches. 2671 2672These features are built on a robust technical foundation�Qdrant vector search, FastEmbed AI models, and intelligent caching strategies�that provides good performance characteristics. The architecture is designed for maintainability: as the Meraki API evolves, the semantic search can adapt through re-indexing, and the multi-key system scales to accommodate growing customer bases. 2673 2674This update shows how AI can improve the experience of working with infrastructure APIs, helping move from memorization-based workflows toward more intent-based interactions. 2675 2676**Try it out**: Deploy the latest Selent MCP server and experience natural language API discovery for yourself. We welcome your feedback as we continue to improve Selent's capabilities for managing Cisco Meraki networks. 2677 2678--- 2679 2680*Selent MCP is available at [github.com/selent-ai/selent-mcp](https://github.com/selent-ai/selent-mcp). For questions, feedback, or support, reach out to our team or open an issue on GitHub.* 2681`},{slug:"customer-feedback-shapes-selent",title:"Listening, Learning, and Launching: How Customer Feedback Shapes Selent's Evolution",excerpt:"Behind every new capability we build is a real-world problem, observed and validated alongside the people managing network environments every day. Discover how customer feedback transformed into our most impactful update yet.",date:"2025-10-17",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Product",tags:["CustomerFeedback","ProductDevelopment","NetworkAutomation","CiscoMeraki","MassDeployment","ConfigurationManagement","AIOps"],coverImage:"/selent-feedback-loop.png",featured:!0,draft:!1,readTime:"3 min",content:` 2682In today's network operations environment, the pace of change is relentless. Organizations are connecting more devices, users, and services than ever before, while the expectation of uptime and security remains absolute. Yet behind every configuration, firmware update, or topology adjustment, there's a growing challenge: how to execute changes quickly and safely, without depending on manual, error-prone processes. 2683 2684Modern IT and NOC teams know this reality well. A single misconfigured switch port or inconsistent VLAN rule can cascade into outages, compliance breaches, or lost productivity. As networks grow in complexity â spanning hybrid clouds, distributed sites, and IoT endpoints â the need for automated, auditable, and consistent configuration management has become essential. In this context, automation isn't just a time-saver; it's the foundation of operational excellence. 2685 2686At Selent, we've embraced this philosophy from the start. Our mission has always been to transform feedback from the field â from engineers, partners, and service providers â into practical, intelligent solutions that enhance daily network operations. Every new capability we build begins with a real-world problem, observed and validated alongside the people managing these environments every day. 2687 2688## Turning Feedback into Action 2689 2690When we launched Selent's AI-powered backup and restore for Cisco Meraki, we quickly realized that our users weren't just looking for resilience â they wanted speed, standardization, and control at scale. One of the most frequent questions from our customers and partners was: 2691 2692**"Can we apply consistent switch port configurations across multiple networks â instantly and safely?"** 2693 2694That simple but powerful request became the blueprint for one of our most impactful updates to date. After months of collaboration, testing, and iteration with our global partner ecosystem, we're proud to introduce a new capability that redefines how teams manage large-scale Meraki environments. 2695 2696## Mass Deployment of Switch Port Configurations â With Just One Click 2697 2698The new feature enables administrators to: 2699 2700- **Select a predefined configuration template.** 2701- **Apply it to hundreds of switches simultaneously, across one or multiple networks.** 2702- **Validate results automatically** â ensuring every change is applied safely and consistently. 2703 2704This means IT teams can now enforce standardized VLAN setups, security policies, or PoE configurations across their entire infrastru
2704cture in seconds. By eliminating repetitive manual work, Selent drastically reduces the risk of human error and accelerates deployment timelines â all while maintaining full visibility and control through our secure, auditable workflows. 2705 2706## Designed with Partners, for Partners 2707 2708Our Technology Partners and Managed Service Providers have been integral to this journey. Their insights from managing multi-tenant environments helped us ensure that this feature not only scales technically, but also aligns with real-world operational practices â from deployment and compliance reporting to service-level management. This collaboration model is at the heart of how Selent evolves: by co-creating with those who live and breathe network operations every day. 2709 2710## What's Next 2711 2712The mass deployment capability marks an important step toward Selent's broader vision of agentic automation â where AI-driven agents handle compliance checks, health monitoring, configuration remediation, and predictive insights seamlessly across the Meraki ecosystem. 2713 2714Future updates will extend the same "one-click" efficiency to additional configuration areas and automation workflows, ensuring Selent remains the intelligent layer between operational intent and network execution. 2715 2716Because when our customers and partners share their challenges, we don't just listen â we build solutions together. 2717 2718## Discover the new feature today 2719 2720Log in at [selent.ai](https://selent.ai) and explore the new Mass Deployment module in your dashboard. Experience how one click can make configuration management faster, safer, and smarter. 2721`},{slug:"securing-ai-network-automation",title:"How to Secure AI-Driven Network Automation: Best Practices & Emerging Threats",excerpt:"AI-driven automation can detect anomalies faster and execute configuration changes in seconds. But the same automation that accelerates operations can also amplify risk if left unchecked. Learn how to build secure, intelligent automation for your network infrastructure.",date:"2025-10-09",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Security",tags:["AI","NetworkSecurity","CyberSecurity","AIOps","CiscoMeraki","ZeroTrust","Compliance","NetworkAutomation"],coverImage:"/networking_ai_automation.png",featured:!0,draft:!1,readTime:"6 min",content:` 2722As artificial intelligence reshapes how networks are managed, monitored, and optimized, a new challenge emerges quietly in parallel: how to keep these intelligent systems secure. 2723 2724AI-driven automation can detect anomalies faster, predict failures before they happen, and execute configuration changes in seconds. But the same automation that accelerates operations can also amplify risk if left unchecked. A single flawed model, poisoned dataset, or unauthorized instruction could push erroneous configurations across hundreds of sites in seconds. 2725 2726At Selent, we believe the next evolution of network operations depends not only on intelligent automation, but on **secure automation**. 2727 2728## New Threats in the Age of AI Networks 2729 2730Traditional network security focused on endpoints, credentials, and perimeter defenses. AI introduces an additional layer of risk: 2731 2732### Data Poisoning 2733Attackers manipulate the training or feedback data used by models, leading to wrong predictions or unsafe automation. In network automation contexts, this could mean gradually introducing patterns that the AI learns as "normal" but are actually harmful. 2734 2735### Model Manipulation 2736AI logic itself can be tampered with, producing biased or unsafe actions. When the model that decides which configurations to apply is compromised, every decision becomes suspect. 2737 2738### Prompt Injection & Command Misuse 2739When AI receives natural-language instructions, malicious or ambiguous prompts could trigger unintended behavior. An attacker with limited access could craft prompts that trick the AI into revealing sensitive information or making unauthorized changes. 2740 2741### Automated Misconfiguration 2742A bug or mislearned pattern could replicate an error at scale, faster than any human operator could intervene. What would take hours to propagate manually can happen across your entire infrastru
2742cture in seconds. 2743 2744### Opaque Decision Making 2745When models act as "black boxes," it's difficult to audit why a change was madeâor to roll it back confidently. Without transparency into AI reasoning, troubleshooting becomes guesswork. 2746 2747## Best Practices to Secure AI-Driven Automation 2748 2749Securing AI systems in networking requires a multi-layered approach. Here are the principles that guide our design at Selent and that every organization should adopt: 2750 2751### 1. Zero-Trust Architecture for AI Agents 2752 2753Treat every AI componentâmodels, APIs, and connectorsâas untrusted by default. Apply granular authentication and authorization, ensuring each agent can only access the resources it truly needs. 2754 2755**In practice:** 2756- Implement role-based access controls for AI systems 2757- Use context-aware authorization (time, scope, historical patterns) 2758- Segment AI systems by network boundariesâa compromise in one area shouldn't affect all infrastructure 2759 2760### 2. Model Governance and Version Control 2761 2762Maintain strict versioning of AI models and their configurations. Every update should be traceable, tested in sandbox environments, and signed digitally before deployment. 2763 2764**Key actions:** 2765- Track all model changes in version control 2766- Require testing in isolated environments before production 2767- Implement cryptographic signing for model deployments 2768- Maintain rollback capabilities for rapid recovery 2769 2770### 3. Data Integrity and Provenance 2771 2772Track where every dataset comes from and who modified it. Implement validation layers that detect anomalies or injected patterns before they influence production models. 2773 2774**Implementation:** 2775- Cryptographically verify training data sources 2776- Monitor for unusual patterns in data feeds 2777- Establish baselines for normal data characteristics 2778- Alert on deviations that could indicate poisoning attempts 2779 2780### 4. Human-in-the-Loop Oversight 2781 2782Even in autonomous environments, critical actionsâsuch as large-scale configuration changes or rollbacksâshould require human review or approval. Automation should augment, not replace, accountability. 2783 2784**Design principles:** 2785- Define clear boundaries for autonomous action 2786- Require human approval for high-impact changes 2787- Provide emergency override and shutdown capabilities 2788- Ensure AI can explain its decisions before acting 2789 2790### 5. Continuous Monitoring and Anomaly Detection 2791 2792Deploy AI to watch over AI. Meta-monitoring agents can identify deviations in model behavior, drift in accuracy, or unexpected traffic patterns resulting from AI decisions. 2793 2794**Monitoring strategy:** 2795- Track AI performance metrics over time 2796- Alert on behavioral changes in AI systems 2797- Monitor decision patterns for anomalies 2798- Maintain comprehensive audit logs 2799 2800### 6. Auditability and Explainability 2801 2802Every automated action must be explainable and auditable. Logs, semantic diffs, and decision traces allow teams to understand what happened, why, and when. 2803 2804**Requirements:** 2805- Maintain detailed logs of all AI decisions 2806- Provide clear explanations for changes 2807- Track inputs, reasoning, and outputs 2808- Enable forensic analysis when issues arise 2809 2810## The Selent Perspective: Secure by Design 2811 2812At Selent, security isn't an afterthoughtâit's embedded in our architecture. 2813 2814Our Backup & Restore and Compliance Agents already operate under zero-trust principles, with encrypted backups, access-scoped API calls, and traceable diffs that show every change in plain language. 2815 2816As we evolve toward autonomous network operations, our goal is clear: empower IT and NetOps teams with intelligent automation that is predictive, explainable, and inherently secure. 2817 2818### How We Implement Security 2819 2820**Zero-Trust from the Ground Up**: Every Selent agent operates with minimal required permissions. API access is scoped precisely to what's needed for each operation. 2821 2822**Encrypted Everything**: All backups are encrypted at rest and in transit. Configuration data is protected with enterprise-grade encryption standards. 2823 2824**Transparent Changes**: Our semantic diff technology translates configuration changes into plain language, making it easy to understand exactly what changed and why. 2825
2826**Audit Trails**: Every action is logged with full contextâwho requested it, when it happened, what changed, and the reasoning behind it. 2827 2828**Human Oversight**: Critical operations can be configured to require explicit approval, ensuring humans remain in control of important decisions. 2829 2830## What's Next 2831 2832AI will continue to drive efficiency and resilience in modern infrastructureâbut only if it's built on a foundation of trust. 2833 2834Organizations that combine automation speed with security discipline will lead the next generation of network management. 2835 2836The question isn't whether to adopt AI automationâit's how to adopt it securely. As you evaluate platforms and build your automation strategy, prioritize: 2837 2838- **Transparency**: Choose solutions where you can understand and audit AI decisions 2839- **Control**: Ensure you can override, stop, or reverse AI actions when needed 2840- **Security-by-design**: Look for platforms built with security principles from the ground up 2841- **Proven practices**: Adopt zero-trust, continuous monitoring, and human oversight 2842 2843If you'd like to explore how to integrate AI safely into your network stack, [contact us](https://selent.ai/contact) or [schedule a demo](https://selent.ai/demo) with our team at selent.ai. 2844 2845--- 2846 2847*The future of network operations is intelligent and automated. Make sure it's also secure.* 2848`},{slug:"ai-agents-network-operations",title:"Going Beyond Backup & Restore: Using AI Agents to Transform Network Operations",excerpt:"Backup, restore, and compliance checklists keep you audit-ready, but they wonât stop the next outage. Discover how AI agents predict and prevent problems across Cisco Meraki networks before users ever notice.",date:"2025-09-17",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"AIOps",tags:["AIOps","CiscoMeraki","NetworkAutomation","Compliance","AI"],coverImage:"https://images.unsplash.com/photo-1544197150-b99a580bb7a8?q=80&w=1974&auto=format&fit=crop&ixlib=rb-4.1.0",featured:!0,draft:!1,readTime:"6 min",content:` 2849Itâs 3:12 AM and your on-call engineer is staring at yet another urgent alert. The backup job succeeded, compliance reports are tidy, and monitoring just flagged a latency spike thatâs already impacting users. By the time the root cause is found, the damage is done. In 2025, reactive playbooks are too slow for hybrid, distributed Cisco Meraki environments that change hundreds of times a day. 2850 2851Backup, restore, and compliance workflows are foundationalâthey keep auditors reassured and give teams insurance when things go sideways. But staying competitive now demands something more: proactive intelligence that predicts, prevents, and resolves issues before they become outages. Thatâs the promise of AI-driven agents like Selent Agent. 2852 2853## Why Backup, Restore & Compliance Alone Fall Short 2854 2855Most Meraki teams rely on three core pillars: 2856 2857- **Backup & Restore** ensures you can roll back from human error, device failure, or major incidents. 2858- **Compliance** satisfies regulators, internal policies, and security frameworks. 2859- **Monitoring & Alerts** surface issues when thresholds are breached or logs show anomalies. 2860 2861All three matterâbut theyâre inherently reactive. You see a problem, then you respond. In high-velocity networks, that lag creates business risk: 2862 2863- Downtime costs average **$9,000 per minute** for mid-sized enterprises. 2864- 58% of network changes are delayed because teams fear introducing new issues. 2865- Manual investigations stretch Mean Time to Repair (MTTR) into hours instead of minutes. 2866 2867Organizations that want to stay resilient need systems that watch continuously, learn from every signal, and take smart action the moment risk appears. 2868 2869## Enter AI Agents for Network Operations 2870 2871AI agents combine automation, observability, and machine intelligence to manage networks with minimal human intervention. When paired with Meraki telemetry, they unlock new capabilities: 2872
2873| Capability | Traditional Approach | AI Agent Enhanced Approach | 2874| --- | --- | --- | 2875| Real-time detection | Alerts trigger after thresholds are crossed | Predict emerging anomalies before thresholds trip | 2876| Automated remediation | Engineers investigate and execute fixes manually | Agents initiate pre-approved responses (restart services, reroute traffic) | 2877| Configuration drift | Periodic audits catch gaps after the fact | Continuous drift detection with safe auto-corrections | 2878| Scaling & capacity | Plans rely on historical usage and guesswork | Demand forecasting with proactive scaling guidance | 2879| Security response | Incidents handled after indications of compromise | Threat prediction and automated containment policies | 2880| Operational efficiency | Teams lose hours firefighting repetitive issues | Lower MTTR, fewer manual tasks, and higher reliability | 2881 2882Instead of waiting for red alerts, AI agents keep operations in a constant state of optimization. 2883 2884## How Selent Agent Elevates Cisco Meraki Networks 2885 2886Selent Agent was purpose-built to plug into Meraki APIs and telemetry streams, turning raw data into actionable intelligence. 2887 2888### Continuous Observability and Insight 2889Selent continuously ingests device events, performance metrics, and topology changes. It learns what ânormalâ looks like for each site, then spots drift or performance risks long before users do. The result: early warning on service degradation, not just red lights after the fact. 2890 2891### Proactive Remediation & Alert Handling 2892When anomalies appear, the agent can either notify engineers sooner or execute automated runbooks for approved scenarios. Think automated VPN failovers, policy adjustments, or configuration rollbacks executed in minutesânot hours. 2893 2894### Policy & Compliance Automation 2895Compliance stops being a quarterly chore. Selent Agent validates configurations against internal policies and external frameworks in real time, flags deviations instantly, and can correct the easy ones automatically. You stay audit-ready every day, not just at audit time. 2896 2897### Anomaly Detection & Root Cause Analytics 2898Instead of throwing alerts over the fence, the agent explains why something went wrong. It correlates recent changes, dependent services, and historical incidents to surface likely root causes. Engineers jump straight to resolution instead of chasing blind leads. 2899 2900### Scalable Deployment & Governance 2901Whether you manage 10 locations or 1,000, Selent Agent enforces consistent baselines across the Meraki estate. Teams define guardrails once, then let agents manage the day-to-day execution and reporting. 2902 2903## Business Outcomes You Can Expect 2904 2905Organizations deploying Selent Agent report results that extend far beyond IT operations: 2906 2907- **Reduced downtime and faster recovery** thanks to predictive detection and automated remediation. 2908- **Operational efficiency** as teams shift from ticket triage to strategic projects. 2909- **Stronger security posture** with continuous compliance and real-time policy enforcement. 2910- **Lower operational costs** driven by fewer incidents, optimized resource usage, and less manual toil. 2911- **Scalable consistency** that keeps expansion projects on schedule without sacrificing standards. 2912 2913## What to Evaluate Before Deploying AI Agents 2914 2915AI automation is powerful, but it needs the right guardrails. Your checklist should include: 2916 2917- **Data access & integrations:** Confirm the agent can ingest Meraki telemetry, logs, and related cloud data. 2918- **Safety nets & overrides:** Require approvals, rollbacks, or staged deployments for high-impact actions. 2919- **Transparency:** Demand activity logs and explainable recommendations so teams can trust the outcomes. 2920- **Regulatory alignment:** Ensure automation respects privacy, retention, and change-control requirements. 2921- **Policy customization:** Map the agentâs actions to your organizationâs unique standards and risk appetite. 2922- **Vendor momentum:** Look for an active roadmap, rapid adoption of new telemetry sources, and responsive support. 2923 2924## Your First 30 Days with Selent Agent 2925 29261. **Week 1 â Baseline:** Connect key Meraki orgs, import policies, and benchmark current MTTR and incident volume.
29272. **Week 2 â Observe:** Run agents in ârecommendation modeâ to see insights without automated action. 29283. **Week 3 â Automate Safely:** Turn on auto-remediation for low-risk scenarios (e.g., config drift corrections). 29294. **Week 4 â Expand:** Add compliance enforcement, build leadership dashboards, and document early wins for stakeholders. 2930 2931Within a month, most teams see fewer overnight escalations, cleaner compliance reports, and measurable MTTR reductions. 2932 2933## The Bottom Line 2934 2935Backup, restore, and compliance workflows remain essentialâtheyâre the safety net every Meraki environment needs. But modern networks demand more than reactive insurance. AI agents like Selent Agent deliver continuous observability, proactive remediation, and the confidence that your operations stay resilient as your estate grows. 2936 2937If your team still spends nights combing through backup logs or chasing alerts after customers complain, itâs time to move beyond checklists. Letâs turn network operations into a proactive advantage. 2938 2939[Request a demo](https://c87b31wu7aq.typeform.com/to/UuTqiop3) to see how Selent Agent can transform your Meraki environment from reactive to self-optimizing. 2940`},{slug:"selent-agent-aiops-cisco-meraki",title:"Introducing Selent Agent: Specialized AI Agents for Cisco Meraki Operations",excerpt:"Deploy specialized agents that continuously analyze, monitor, and optimize your Cisco Meraki networksâdelivering automated insights and guided remediation when issues arise.",date:"2025-09-09",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Product",tags:["AIOps","NetworkAutomation","CiscoMeraki","AI","NetworkMonitoring","Compliance"],coverImage:"https://images.unsplash.com/photo-1597733336794-12d05021d510?q=80&w=1974&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D",featured:!0,draft:!1,readTime:"7 min",content:` 2941Managing Cisco Meraki networks at scale requires constant vigilance. Network teams monitor hundreds of metrics, track compliance requirements, and respond to issues across distributed locationsâoften simultaneously. It's complex work that demands both deep expertise and immediate availability. 2942 2943Today, we're introducing Selent Agent: a suite of specialized AI agents that work alongside your team to continuously analyze, monitor, and optimize your Cisco Meraki infrastructure. 2944 2945## The Challenge of Scale in Network Operations 2946 2947Modern enterprises rely on their networks for everything. When issues arise, the impact ripples across the organizationâfrom productivity losses to revenue impacts. Yet network teams are stretched thin, managing increasingly complex environments with limited resources. 2948 2949The traditional approach of manual monitoring and reactive response creates several problems: 2950 2951- Critical issues often go undetected until users complain 2952- Teams waste time investigating false positives 2953- Compliance checks happen sporadically, creating risk windows 2954- Knowledge gaps emerge when key team members are unavailable 2955 2956What if you could have specialized experts continuously watching your network, analyzing patterns, and providing actionable insights? 2957 2958## Meet Your Team of Specialized Agents 2959 2960Selent Agent takes a focused approach to network intelligence. Rather than trying to solve everything with one tool, we've developed specialized agents that excel at specific aspects of network operations: 2961 2962### Network Analysis Agent 2963This agent continuously examines your network topology, traffic patterns, and device configurations. It understands the relationships between components and can identify issues that might not be obvious from individual metrics. 2964 2965When something goes wrongâlike a device going offlineâthe Network Analysis Agent doesn't just alert you. It provides context about what's happening, potential causes, and the broader impact on your network. 2966 2967### Compliance Agent 2968Maintaining compliance isn't a one-time activityâit's an ongoing requirement. The Compliance Agent continuously monitors your configurations against your security policies and regulatory requirements. 2969 2970Instead of scrambling during audit season, you have continuous visibility into your compliance posture. The agent flags deviations immediately and provides specific remediation steps to bring configurations back into compliance. 2971 2972### Health Agent 2973Network health goes beyond simple up/down status. The Health Agent tracks device performance, resource utilization, and environmental factors to identify potential problems before they impact operations. 2974 2975By analyzing trends over time, it can predict when devices might fail or when capacity issues might emerge, giving you time to address issues proactively. 2976 2977### Monitor Agent 2978The Monitor Agent provides real-time visibility into network status across all your locations. But unlike traditional monitoring that floods you with alerts, it learns your network's normal behavior to dramatically reduce false positives. 2979 2980It understands which issues are critical and which can wait, ensuring your team focuses on what matters most. 2981 2982## How It Works in Practice 2983 2984Let's walk through how Selent Agent transforms day-to-day operations: 2985 2986### Scheduled Analysis 2987You select specific networks and schedule agents to run automatically in the background. Choose daily health checks, weekly compliance audits, or continuous monitoringâwhatever matches your operational needs. 2988 2989### Automated Reporting 2990When agents complete their analysis, you receive detailed reports via email. The
2990se aren't generic status updatesâthey're actionable insights specific to your environment, highlighting what needs attention and why. 2991 2992### Historical Context 2993Every analysis is logged and accessible through the platform. You can track trends over time, understand recurring issues, and demonstrate compliance through comprehensive audit trails. 2994 2995### Interactive Problem Solving 2996Here's where it gets interesting. When an agent identifies an issue, you don't just get an alertâyou can have a conversation with that specialized agent to understand the problem and explore solutions. 2997 2998## A Real Example: From Detection to Resolution 2999 3000Let me show you how this works with a real scenario we encountered: 3001 3002The Network Analysis Agent detected a device offline in one of our monitored networks. But it didn't stop at detection. The agent analyzed the network context and identified that this wasn't just any deviceâit was a critical switch affecting multiple downstream connections. 3003 3004Through the conversational interface, the team could ask questions: 3005- "What's the impact of this outage?" 3006- "What are the possible causes?" 3007- "What's the recommended remediation?" 3008 3009The agent provided specific guidance based on the network topology and recent changes. The team went to the Cisco Meraki dashboard, implemented the fix, and watched as the device came back online and metrics returned to normal. 3010 3011What traditionally might have taken hours of investigation was resolved
3011in minutes. 3012 3013## See Selent Agent in Action 3014 3015Watch how specialized agents transform network operations through automated analysis and guided remediation: 3016 3017<iframe width="560" height="315" src="https://www.youtube.com/embed/-zHmXzHzf5o" title="Selent Agent Demo" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe> 3018 3019## The Value of Specialized Intelligence 3020 3021### Depth Over Breadth 3022Each agent is purpose-built for its domain. The Compliance Agent understands regulatory frameworks and security best practices. The Health Agent knows performance baselines and failure patterns. This specialization means more accurate analysis and better recommendations. 3023 3024### Continuous Coverage 3025Agents work 24/7, providing coverage when your team isn't available. Weekend issues don't wait until Monday. Overnight problems get detected immediately. Your network gets the attention it deserves around the clock. 3026 3027### Knowledge Preservation 3028Every interaction with agents builds institutional knowledge. New team members can leverage the same specialized expertise as veterans. When someone leaves, their knowledge doesn't walk out the door. 3029 3030### Proactive vs. Reactive 3031Instead of waiting for problems to impact users, agents identify issues early. They spot trends, predict failures, and recommend optimizations. Your team shifts from fighting fires to preventing them. 3032 3033## Integration with Your Existing Workflow 3034 3035### Works with Meraki Dashboard 3036Selent Agent doesn't replace your Cisco Meraki dashboardâit enhances it. You still use the familiar Cisco Meraki interface for configuration and management. Agents provide the intelligence layer that guides your actions. 3037 3038### Flexible Scheduling 3039Run agents on your schedule. Daily health checks for critical networks. Weekly compliance audits for regulated environments. Continuous monitoring for sites with high availability requirements. 3040 3041### Email and Platform Access 3042Receive reports where you want them. Email delivers insights directly to your inbox. The platform provides historical context and trend analysis. Choose what works for your workflow. 3043 3044### API Integration 3045For organizations with existing automation, Selent Agent provides API access to agent results and insights. Integrate with your ticketing system, SIEM, or automation platform. 3046 3047## Getting Started 3048 3049### Start Small 3050Begin with one agent on your most critical networks. See the value before expanding coverage. Most teams start with the Monitor Agent for immediate visibility or the Compliance Agent for audit preparation. 3051 3052### Build Confidence 3053As you see results, expand coverage. Add more networks. Deploy additional agents. Increase automation. The platform grows with your confidence and needs. 3054 3055### Measure Impact 3056Track metrics that matter: 3057- Incident detection time 3058- Resolution speed 3059- Compliance scores 3060- Team productivity 3061 3062Most organizations see measurable improvements within the first month. 3063 3064## The Human Element 3065 3066It's worth emphasizing: Selent Agent doesn't replace network engineers. It amplifies their capabilities. 3067 3068Agents handle the routine analysis, continuous monitoring, and initial investigation. Engineers focus on strategic decisions, complex problem solving, and network optimization. It's about doing more with the same team, not replacing human expertise. 3069 3070The conversational interface means engineers can leverage agent intelligence while applying their judgment and experience. It's a partnership where AI handles data analysis and pattern recognition while humans make decisions and implement solutions. 3071 3072## Looking Forward 3073 3074Network operations are evolving. The complexity will only increase as networks grow and become more critical to business operations. Manual approaches that worked for smaller, simpler networks don't scale to modern requirements. 3075 3076Selent Agent represents a practical step toward intelligent network operations. Not a far-off vision of fully autonomous networks, but a solution you can deploy today that delivers immediate value while building toward that future. 3077 3078By deploying specialized agents that understand your specific Cisco Meraki environment, you're not just solving today's problemsâyou're building a foundation for scalable, intelligent network operations. 3079 3080--- 3081 3082*Ready to deploy specialized agents for your Cisco Meraki networks? Learn how Selent Agent can provide continuous analysis, ensure compliance, and guide your team through issue resolution.*`},{slug:"open-sourcing-selent-mcp",title:"Open Sourcing Selent MCP: Dynamic Meraki API Access Through Model Context Protocol",excerpt:"Announcing our first open source project: a Model Context Protocol server that provides dynamic access to the entire Cisco Meraki Dashboard API through intelligent discovery and execution.",date:"2025-08-18",author:"Fabian Levinsky",authorImage:"/fabian.jpeg",authorTitle:"Head of Engineering",authorBio:"Fabian is the Head of Engineering at Selent, leading backend systems, AI engineering, and frontend development. With deep expertise in distributed systems and intelligent automation, he architects the core technology that powers Selent's network operations platform.",category:"Open Source",tags:["OpenSource","MCP","Meraki","API","NetworkAutomation","AI"],coverImage:"https://images.unsplash.com/photo-1558494949-ef010cbdcc31?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"6 min",content:` 3083Today, we're releasing our first open source project: **Selent MCP** - a Model Context Protocol server that provides dynamic access to the entire Cisco Meraki Dashboard API. Rather than building static tools for individual endpoints, we've engineered a solution that discovers and executes any of the 400+ Meraki API calls on demand. 3084 3085## The Technical Problem We Solved 3086 3087Working with the Meraki Dashboard API typically requires building individual integrations for each endpoint. With over 400 available endpoints across organizations, devices, networks, and security functions, this approach creates significant development overhead and maintenance burden. 3088 3089Traditional solutions force teams into a painful cycle: 3090 3091- **Manual tool creation** for each API endpoint 3092- **Hardcoded parameter validation** that breaks with API updates 3093- **Custom error handling** per endpoint, leading to inconsistent behavior 3094- **Constant maintenance** as new API features are released 3095 3096For network engineering teams managing dozens of Meraki networks, this meant weeks of development time just to access basic functionality - time that could be spent on actual network optimization and automation. 3097 3098## Our engineering approach: Dynamic Discovery and Execution 3099 3100Selent MCP solves this through intelligent API discovery and dynamic execution. The system uses semantic matching to map natural language queries to appropriate API endpoints, then dynamically validates parameters and executes calls. 3101 3102### Core architecture 3103 3104\`\`\` 3105Dynamic Endpoint Resolution 3106âââ Semantic query matching 3107âââ Parameter autodiscovery
3108âââ Real-time validation 3109âââ Generic execution framework 3110 3111Production Deployment 3112âââ Docker containerization 3113âââ Auto-updating image pulls 3114âââ Environment-based configuration 3115âââ Comprehensive logging 3116\`\`\` 3117 3118### Key technical features 3119 3120**Discovery Engine**: Semantic search across API endpoint documentation eliminates the need for developers to memorize hundreds of endpoint names and parameters. 3121 3122**Parameter Resolution**: Dynamic parameter detection and validation means the system adapts to API changes automatically, without requiring code updates. 3123 3124**Execution Layer**: Generic API client with comprehensive error handling provides consistent behavior across all endpoints. 3125 3126**Caching Strategy**: Performance optimization for common queries reduces API calls and improves response times. 3127 3128## Implementation examples: Natural Language to API Calls 3129 3130The system translates natural language directly to properly formatted API calls: 3131 3132\`\`\`shell 3133# Query: "Get device Q4AB-WMAB-TAZU port 4 configuration" 3134# Resolves to: switch.getDeviceSwitchPort(serial="Q4AB-WMAB-TAZU", portId="4") 3135 3136# Query: "List network clients with traffic data" 3137# Resolves to: networks.getNetworkClients(networkId="N_xxx", timespan=3600) 3138 3139# Query: "Show firewall rules for MX devices" 3140# Resolves to: appliance.getNetworkApplianceFirewallL3FirewallRules(networkId="N_xxx") 3141\`\`\` 3142 3143This approach transforms how network teams interact with the Meraki API - from complex documentation lookup and parameter crafting to simple, natural language queries. 3144 3145## See It In Action 3146 3147Watch how Selent MCP transforms Meraki API interactions through natural language queries in Claude: 3148 3149<div style="position: relative; padding-bottom: 57.401490947816825%; height: 0;"><iframe src="https://www.loom.com/embed/e4d592b38a8a453c8abb81812bf096d6?sid=b644742f-8754-42d2-85ad-68b05605a751" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe></div> 3150 3151## Engineering benefits that matter 3152 3153### Scalability without complexity 3154 3155Single implementation supports all current and future Meraki API endpoints. When Cisco releases new API features, they become immediately available without any code changes. 3156 3157### Zero maintenance overhead 3158 3159No per-endpoint code maintenance required. The system adapts to API changes automatically, eliminating the traditional maintenance burden. 3160 3161### Optimized performance 3162 3163Intelligent caching and single-call optimization deliver response times under 2 seconds for common operations, with cache hit ratios exceeding 90%. 3164 3165### Enterprise reliability 3166 3167Generic error handling and retry logic across all endpoints ensures consistent behavior, while built-in rate limiting prevents API throttling issues. 3168 3169## Production-Ready deployment 3170 3171We've engineered this specifically for production environments where reliability and ease of deployment are critical: 3172 3173\`\`\`shell 3174# Production deployment with automatic updates 3175docker run \\ 3176 --pull=always \\ 3177 -e MERAKI_API_KEY=$MERAKI_API_KEY \\ 3178 -i --rm selentai/selent-mcp:latest 3179\`\`\` 3180 3181The \`--pull=always\` flag ensures your deployment automatically receives updates without manual intervention. Container health checks and comprehensive logging provide the operational visibility production environments demand. 3182 3183## Model Context Protocol implementation 3184 3185Built on Anthropic's Model Context Protocol specification, Selent MCP implements the complete MCP interface: 3186 3187- **Standard MCP Interface**: Compatible with any MCP client (Claude Desktop, custom integrations, etc.) 3188- **Resource Discovery**: Dynamic endpoint enumeration for real-time API exploration 3189- **Tool Execution**: Parameterized API calls with intelligent parameter validation 3190- **Error Propagation**: Structured error responses that provide actionable feedback 3191 3192## Why we're open sourcing this 3193 3194Network automation shouldn't require reinventing the same integration patterns repeatedly. We're releasing this as open source to: 3195 3196### Accelerate industry adoption 3197 3198Remove the technical barriers that prevent teams from leveraging Meraki's powerful API capabilities. 3199 3200### Foster community innovation 3201 3202Enable network engineers and developers to contribute enhancements that benef
3202it the entire ecosystem. 3203 3204### Standardize integration patterns 3205 3206Provide a consistent, reliable interface that organizations can depend on across different projects and teams. 3207 3208### Eliminate redundant development 3209 3210Stop wasting engineering cycles on building the same API integrations over and over. 3211 3212## Technical specifications 3213 3214### Performance characteristics 3215 3216- **Cold start latency**: <2 seconds for common queries 3217- **Cache hit ratio**: >90% for repeated operations 3218- **Memory footprint**: <100MB base container 3219- **API compliance**: Built-in rate limiting and retry logic 3220 3221## Getting Started: From Zero to API integration in minutes 3222 3223For engineering teams ready to integrate: 3224 3225\`\`\`shell 3226# Clone and deploy locally for development 3227git clone [repository-url] 3228cd selent-mcp 3229docker-compose up -d 3230 3231# Or use pre-built image for production 3232docker run --pull=always selentai/selent-mcp:latest 3233\`\`\` 3234 3235Configure your MCP client (Claude Desktop, custom API integration, etc.) to connect to the server endpoint, and you're ready to start querying the Meraki API with natural language. 3236 3237## Engineering roadmap: What's Next 3238 3239This release represents our foundational MCP implementation, built with extensibility in mind. Our engineering roadmap includes: 3240 3241### Performance optimizations 3242 3243Usage pattern analysis will drive targeted performance improvements, including predictive caching and query optimization. 3244 3245### Extended caching strategies 3246 3247Intelligent cache warming and hierarchical caching for complex multi-endpoint operations. 3248 3249### Multi-Provider support 3250 3251Extending the dynamic discovery pattern to other network management APIs beyond Meraki. 3252 3253### Enhanced diagnostics 3254 3255Detailed error diagnostics and API call tracing for enterprise debugging requirements. 3256 3257The codebase is architected for community contribution, with clean abstractions and comprehensive documentation designed to facilitate external development. 3258 3259## Access and documentation 3260 3261- **Source Code**: [GitHub Repository URL] 3262- **Container Images**: \`docker pull selentai/selent-mcp:latest\` 3263- **Technical Documentation**: Complete API reference and integration guides in repository README 3264- **Community Support**: Issues and discussions through GitHub 3265 3266## The bigger picture 3267 3268This project represents more than just another API integration tool, it's our commitment to advancing network automation through intelligent, adaptive tooling. By eliminating the friction between network engineers and the APIs they need to work with, we're enabling teams to focus on what matters: building resilient, optimized networks. 3269 3270The engineering community has consistently shown that open collaboration produces the most robust, innovative solutions. We're excited to see how network engineers, developers, and automation specialists build upon this foundation to solve challenges we haven't even imagined yet. 3271 3272Network automation should be accessible, reliable, and intelligent. With Selent MCP, it finally is. 3273 3274--- 3275 3276*Ready to transform your Meraki API integration approach? Clone the repository and start building smarter network automation today.*`},{slug:"executive-guide-aiops-networking",title:"The Executive Guide to AIOps: Transforming Network Operations in the Digital Enterprise",excerpt:"A strategic briefing for business leaders on how Artificial Intelligence for IT Operations transforms network management from cost center to competitive advantage.",date:"2025-08-01",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Executive Guide",tags:["AIOps","DigitalTransformation","NetworkAutomation","ExecutiveStrategy","ROI"],coverImage:"https://images.unsplash.com/photo-1558494949-ef010cbdcc31?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"10 min",content:` 3277## Executive Summary 3278 3279In today's hyper-connected business environment, network performance directly impacts customer experience, employee productivity, and revenue generation. Yet traditional network management approaches struggle to keep pace with the complexity of modern infrastru
3279cture. This is where AIOpsâArtificial Intelligence for IT Operationsâemerges as a game-changing capability for forward-thinking organizations. 3280 3281AIOps represents a fundamental shift in how enterprises manage their network infrastructure. By applying advanced artificial intelligence and machine learning to network operations, organizations can transform from reactive firefighting to proactive optimization. For businesses running on cloud-managed platforms like Cisco Meraki, AIOps unlocks unprecedented visibility, automation, and intelligence across their entire network ecosystem. 3282 3283The business case is compelling: enterprises implementing AIOps report average returns of $3.50 for every dollar invested, with operational expense reductions of 42% and incident resolution times cut by 30-50%. Beyond the numbers, AIOps enables IT teams to shift focus from routine maintenance to strategic innovation, directly supporting digital transformation initiatives. 3284 3285This guide provides executives with a clear understanding of AIOps capabilities, business benefits, and strategic implications. Whether you're evaluating technology investments, planning digital transformation, or seeking competitive advantage through operational excellence, understanding AIOps is essential for informed decision-making in today's digital economy. 3286 3287## Understanding AIOps: A Business Perspective 3288 3289### What is AIOps? 3290 3291At its core, AIOps is the application of artificial intelligence to IT operations. Think of it as creating a "digital immune system" for your network infrastructureâone that automatically identifies, diagnoses, and responds to issues before they impact your business. 3292 3293For executives, AIOps translates to three fundamental capabilities: 3294 32951. **Predictive Intelligence**: Anticipating problems before they occur 32962. **Automated Response**: Resolving issues without human intervention 32973. **Continuous Optimization**: Learning and improving from every interaction 3298 3299### The Evolution from Manual to Intelligent Operations 3300 3301Traditional network management follows a familiar pattern: something breaks, alarms sound, engineers investigate, and eventually the problem is fixed. This reactive cycle consumes resources, impacts productivity, and often results in customer-facing downtime. 3302 3303AIOps transforms this paradigm. Instead of waiting for problems to manifest, intelligent systems continuously analyze network patterns, predict potential issues, and often resolve them before anyone notices. It's the difference between emergency room visits and preventive healthcare. 3304 3305### Why Traditional Approaches Fall Short 3306 3307Modern enterprises operate networks of unprecedented scale and complexity. A typical mid-market company manages hundreds of network devices across multiple locations, supporting thousands of users and applications. Traditional management approaches simply cannot scale to meet these demands: 3308 3309- **Human limitations**: Network engineers can monitor dozens of metrics; AI can analyze millions 3310- **Speed requirements**: Modern business demands instant response; manual processes take hours 3311- **Complexity growth**: Networks grow exponentially more complex; human capacity remains linear 3312- **Cost escalation**: Adding staff to manage growth becomes prohibitively expensive 3313 3314## The Business Impact of Network Intelligence 3315 3316### From Cost Center to Strategic Asset 3317 3318Traditionally, network infrastructure has been viewed as a necessary costâlike electricity or plumbing. AIOps fundamentally shifts this perspective, transforming networks into strategic business enablers that drive competitive advantage. 3319 3320Consider how network intelligence impacts core business metrics: 3321 3322**Customer Experience** 3323- 99.99% uptime becomes achievable and sustainable 3324- Performance issues are resolved before customers notice 3325- Service delivery becomes predictable and reliable 3326 3327**Operational Efficiency** 3328- IT staff productivity increases by 50% or more 3329- Routine tasks are automated, freeing resources for innovation 3330- Problem resolution times drop from hours to minutes 3331 3332**Business Agility** 3333- New services deploy faster with intelligent validation 3334- Scaling becomes predictable and automated 3335- Change risk decreases through predictive analysis 3336 3337### Key Performance Indicators That Matter 3338 3339When evaluating AIOps impact, focus on metrics that directly affect business outcomes: 3340
33411. **Mean Time to Resolution (MTTR)**: Reduced by 50-70% 33422. **Operational Expenses**: Decreased by 35-45% 33433. **Service Availability**: Improved from 99.5% to 99.99% 33444. **IT Productivity**: Increased by 40-60% 33455. **Customer Satisfaction**: Improved by 25-35% 3346 3347### Real-World Business Outcomes 3348 3349Leading organizations are already realizing significant benefits from AIOps implementation: 3350 3351**Global Retail Chain**: A 2,000-location retailer reduced network-related store closures by 95%, saving $4.2M annually in lost sales. 3352 3353**Healthcare Network**: A hospital system improved network reliability to 99.99%, ensuring critical patient care systems remain available. 3354 3355**Financial Services**: A regional bank reduced compliance audit preparation from weeks to hours while improving security posture. 3356 3357## The Journey: From Reactive to Predictive Operations 3358 3359### The AIOps Maturity Model 3360 3361Organizations typically progress through four stages in their AIOps journey: 3362 3363#### Stage 1: Visibility and Monitoring 3364- Comprehensive view of network health 3365- Real-time performance metrics 3366- Consolidated alerting and dashboards 3367- **Business Impact**: Faster problem identification, reduced blind spots 3368 3369#### Stage 2: Automated Response and Remediation 3370- Automatic resolution of common issues 3371- Intelligent alert prioritization 3372- Workflow automation 3373- **Business Impact**: 50% reduction in manual interventions 3374 3375#### Stage 3: Predictive Optimization 3376- Anticipation of problems before occurrence 3377- Capacity planning and forecasting 3378- Proactive performance tuning 3379- **Business Impact**: 70% reduction in incidents 3380 3381#### Stage 4: Autonomous Operations 3382- Self-healing infrastructure 3383- Continuous optimization 3384- Business-aligned automation 3385- **Business Impact**: IT becomes innovation driver 3386 3387### Practical Progression Examples 3388 3389Most organizations begin their journey by addressing specific pain points: 3390 3391**Year 1**: Implement monitoring and automated alerting 3392- Reduce false alarms by 80% 3393- Cut incident response time in half 3394 3395**Year 2**: Deploy automated remediation 3396- Eliminate 60% of manual tasks 3397- Improve team productivity by 40% 3398 3399**Year 3**: Achieve predictive capabilities 3400- Prevent 70% of potential outages 3401- Enable proactive business planning 3402 3403## Strategic Benefits for the Enterprise 3404 3405### Operational Excellence 3406 3407AIOps delivers measurable improvements across operational metrics: 3408 3409**Resource Optimization** 3410- Reduce operational overhead by 40% 3411- Reallocate 50% of IT time to strategic projects 3412- Decrease training requirements for new staff 3413 3414**Risk Mitigation** 3415- Prevent 70% of potential security incidents 3416- Ensure continuous compliance 3417- Reduce human error by 80% 3418 3419**Service Quality** 3420- Achieve consistent performance across all locations 3421- Deliver predictable user experience 3422- Enable 24/7 reliability without 24/7 staffing 3423 3424### Innovation Acceleration 3425 3426By automating routine operations, AIOps frees your team to focus on innovation: 3427 3428- Launch new services 60% faster 3429- Test and deploy changes with confidence 3430- Experiment without fear of breaking production 3431- Align IT initiatives with business goals 3432 3433### Competitive Differentiation 3434 3435In today's digital economy, network performance directly impacts competitive position: 3436 3437- Superior customer experience drives loyalty 3438- Operational efficiency enables price competitiveness 3439- Agility allows rapid response to market changes 3440- Reliability builds trust and reputation 3441 3442## ROI and Value Realization 3443 3444### The Financial Case for AIOps 3445 3446Organizations implementing AIOps typically see returns within 12-18 months: 3447 3448**Direct Cost Savings** 3449- Labor costs reduced by 35-45% 3450- Downtime costs decreased by 60-80% 3451- Infrastructure efficiency improved by 25-30% 3452 3453**Revenue Protection** 3454- Prevent $500K-$2M in annual downtime losses 3455- Maintain customer satisfaction and retention 3456- Enable new revenue-generating services 3457 3458**Strategic Value** 3459- Accelerate digital transformation initiatives 3460- Improve competitive positioning 3461- Enhance organizational agility 3462 3463### ROI Calculation Framework 3464 3465For a typical enterprise with 500+ network devices: 3466 3467**Annual Costs Without AIOps**: 3468- Network operations staff: $1.2M 3469- Downtime impact: $800K 3470- Inefficiency costs: $400K
3471- **Total: $2.4M** 3472 3473**Annual Costs With AIOps**: 3474- AIOps platform: $300K 3475- Reduced staff needs: $700K 3476- Minimal downtime: $100K 3477- **Total: $1.1M** 3478 3479**Net Annual Benefit**: $1.3M 3480**ROI**: 333% over three years 3481**Payback Period**: 9-12 months 3482 3483### Beyond the Numbers 3484 3485While financial metrics are important, AIOps delivers strategic benefits that transcend simple ROI: 3486 3487- **Business Resilience**: Ability to maintain operations during disruptions 3488- **Scalability**: Support growth without proportional cost increases 3489- **Innovation Capacity**: Resources freed for digital transformation 3490- **Market Responsiveness**: Agility to adapt to changing conditions 3491 3492## Implementation Considerations 3493 3494### Organizational Readiness 3495 3496Successful AIOps implementation requires more than technology: 3497 3498**Leadership Alignment** 3499- Executive sponsorship and vision 3500- Clear success metrics 3501- Change management commitment 3502 3503**Cultural Factors** 3504- Willingness to embrace automation 3505- Trust in AI-driven decisions 3506- Focus on continuous improvement 3507 3508**Skills Evolution** 3509- Shift from reactive to strategic thinking 3510- Development of new competencies 3511- Emphasis on business alignment 3512 3513### Success Factors 3514 3515Organizations that realize maximum value from AIOps share common characteristics: 3516 35171. **Start with Clear Objectives**: Define specific business outcomes 35182. **Phase Implementation**: Begin with high-impact use cases 35193. **Measure Progress**: Track both technical and business metrics 35204. **Iterate and Improve**: Continuously refine based on results 35215. **Invest in Change Management**: Support team transformation 3522 3523### Common Pitfalls to Avoid 3524 3525Learn from others' experiences: 3526 3527- **Don't automate broken processes**: Fix fundamentals first 3528- **Avoid technology-first thinking**: Focus on business outcomes 3529- **Don't neglect team readiness**: Invest in training and support 3530- **Resist all-or-nothing approaches**: Phase implementation 3531- **Don't ignore cultural factors**: Address resistance proactively 3532 3533## Future-Proofing Your Network Strategy 3534 3535### Emerging Trends Shaping Network Operations 3536 3537Stay ahead by understanding where the industry is heading: 3538 3539**Autonomous Networks** 3540- Self-configuring infrastructure 3541- Business-intent driven operations 3542- Zero-touch provisioning 3543 3544**Edge Intelligence** 3545- Distributed AI processing 3546- Real-time local decision making 3547- Reduced latency and bandwidth 3548 3549**Predictive Business Analytics** 3550- Network insights driving business decisions 3551- Correlation with business metrics 3552- Proactive capacity planning 3553 3554### Strategic Planning Considerations 3555 3556As you develop your network strategy, consider: 3557 35581. **Scalability Requirements**: Will your approach support 10x growth? 35592. **Integration Capabilities**: Can you leverage existing investments? 35603. **Vendor Ecosystem**: Are you building or buying capabilities? 35614. **Skills Development**: How will you evolve team competencies? 35625. **Business Alignment**: Does your strategy support corporate objectives? 3563 3564### Building for Tomorrow's Needs 3565 3566The pace of change continues to accelerate. Organizations that thrive will be those that: 3567 3568- Embrace intelligent automation 3569- Focus on business outcomes over technology 3570- Invest in continuous learning and adaptation 3571- Build flexibility into their strategies 3572- Maintain security and compliance as foundations 3573 3574## The Path Forward 3575 3576AIOps represents more than a technology upgradeâit's a strategic transformation that positions your organization for success in the digital economy. The journey from reactive to predictive operations delivers immediate operational benefits while building long-term competitive advantage. 3577 3578For executives evaluating this transformation, the key questions are: 3579 35801. Can your organization afford to maintain status quo operations while competitors advance? 35812. What business opportunities could you pursue with 50% more IT capacity? 35823. How would 99.99% network reliability impact your customer relationships? 35834. What's the cost of not actingâin both financial and competitive terms? 3584 3585The transition to intelligent network operations is not a matter of if, but when. Organizations that move decisively will capture first-mover advantages, while those that delay risk falling behind in an increasingly digital marketplace. 3586 3587## Next Steps 3588 3589Ready to explore how AIOps can transform your network operations? Consider these immediate actions: 3590 35911. **Assess Current State**: Evaluate your operational maturity and pain points 35922. **Define Success Metrics**: Establish clear business objectives 35933. **Build the Business Case**: Calculate potential ROI for your organization 35944. **Develop a Roadmap**: Create a phased implementation plan
35955. **Engage Stakeholders**: Align leadership and teams around the vision 3596 3597The journey to intelligent network operations begins with a single step. For organizations ready to transform their networks from cost centers to strategic assets, that step starts today. 3598 3599--- 3600 3601*This executive guide provides a foundation for understanding AIOps in network operations. For personalized insights on how intelligent automation can transform your specific network environment, consider engaging with industry experts who can assess your unique requirements and opportunities.*`},{slug:"automate-cisco-meraki-backup-restore",title:"How to Automate Cisco Meraki Configuration Backup and Restore",excerpt:"Learn how modern organizations are automating their Cisco Meraki configuration backups to avoid downtime, leverage automation, and stay protected.",date:"2025-07-25",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Technical",tags:["CiscoMeraki","Automation","BackupRestore","NetworkAutomation","AIOps"],coverImage:"https://images.unsplash.com/photo-1558618666-fcd25c85cd64?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"9 min",content:` 3602**How does your company handle Cisco Meraki configuration backups and restores?** 3603 3604If you're like most organizations, the answer probably involves a mix of manual processes, occasional scripts, and crossed fingers. But here's the reality: in an era where the average enterprise manages 309 networks and nearly 1,800 devices, manual configuration management is becoming impossible to sustain. 3605 3606The good news? Leading organizations are transforming their approach to Meraki configuration managementâand seeing remarkable results. From 95% faster recovery times to millions in prevented downtime costs, the shift to automation is delivering measurable business value. 3607 3608## The State of Cisco Meraki Configuration Management Today 3609 3610### Where Organizations Stand 3611 3612Our research reveals a striking divide in how companies approach Cisco Meraki configuration management: 3613 3614- **45%** rely on manual periodic backups (when someone remembers) 3615- **28%** use basic scripts that run occasionally 3616- **19%** have no formal backup strategy at all 3617- **Only 8%** have implemented comprehensive automation 3618 3619This means 92% of organizations are operating with significant riskâone configuration error away from extended downtime. 3620 3621### The Growing Complexity Challenge 3622 3623Modern Cisco Meraki environments have evolved far beyond simple deployments. Today's networks feature: 3624 3625- **Multi-site architectures** with complex AutoVPN meshes connecting hundreds of locations 3626- **Dynamic configurations** that change multiple times daily through APIs and integrations 3627- **Template-based deployments** where one change can cascade across entire regions 3628- **Hybrid environments** mixing cloud-managed and on-premises infrastructure 3629 3630This complexity makes manual tracking virtually impossible. As one network architect at a Fortune 500 retailer noted: "We were spending more time documenting changes than making them. And we still couldn't keep up." 3631 3632## Understanding the True Business Impact 3633 3634### Beyond Downtime: The Ripple Effect 3635 3636When configurations fail, the impact extends far beyond simple connectivity loss. Recent industry analysis shows: 3637 3638**Immediate Business Impact:** 3639- Lost revenue averaging $5,600-$9,000 per minute 3640- Employee productivity losses affecting thousands of workers 3641- Customer experience degradation leading to 32% churn rate 3642- SLA violations triggering penalty clauses 3643 3644**Long-term Consequences:** 3645- Compliance audit failures resulting in fines up to $50 million 3646- Security vulnerabilities from misconfigured policies 3647- Technical debt accumulation making future changes riskier 3648- Team burnout from constant firefighting 3649 3650### Real-World Scenarios That Keep Teams Up at Night 3651 3652**The Cascade Failure:** In September 2024, a routine VLAN change at a major healthcare provider triggered an AutoVPN reconfiguration that propagated across 150 clinics. Recovery took 14 hours and cost an estimated $4.2 million. 3653 3654**The Template Disaster:** A retail chain's template modification affected 500 stores simultaneously. Without proper backups, each location required manual reconfigurationâa process that took three weeks to complete fully. 3655 3656**The Compliance Nightmare:** During a surprise audit, a financial services firm couldn't prove their network configurations from 90 days prior. The resulting investigation and remediation cost $800,000 and damaged key client relationships. 3657 3658## The Journey to Automation Excellence 3659 3660### Stage 1: Establishing Configuration Visibility 3661 3662The first step toward automation is understanding what you have. Leading organizations start by: 3663 3664**Creating a Configuration Inventory:** 3665- Documenting all networks, devices, and templates 3666- Mapping configuration dependencies 3667- Identifying critical vs. non-critical components 3668- Establishing baseline configurations 3669 3670**Implementing Version Control:** 3671- Treating configurations as code 3672- Tracking all changes with timestamps and attribution 3673- Creating approval workflows for modifications 3674- Maintaining configuration history 3675 3676### Stage 2: Building Automated Backup Capabilities 3677 3678Modern backup strategies go beyond simple snapshots: 3679 3680**Continuous Configuration Capture:** 3681- Real-time detection of configuration changes 3682- Automatic backup triggering based on modifications 3683- Encrypted storage with geographic redundancy 3684- Retention policies aligned with compliance requirements 3685 3686**Intelligent Backup Management:** 3687- Deduplication to optimize storage 3688- Compression without losing fidelity 3689- Metadata tagging for easy retrieval 3690- Automated testing of backup integrity 3691 3692### Stage 3: Implementing Smart Recovery 3693 3694The true test of any backup system is restoration. Advanced organizations implement: 3695 3696**Rapid Recovery Capabilities:**
3697- One-click restoration to any point in time 3698- Granular recovery options (full network or specific components) 3699- Pre-validated configurations to prevent invalid restores 3700- Automated rollback if issues are detected 3701 3702**Progressive Deployment Strategies:** 3703- Canary deployments to test configurations 3704- Staged rollouts with automatic health checks 3705- Immediate rollback triggers based on performance metrics 3706- Business-hours deployment windows 3707 3708## The AI Revolution in Configuration Management 3709 3710### Predictive Intelligence Changes Everything 3711 3712Artificial intelligence is transforming reactive configuration management into proactive network optimization: 3713 3714**Configuration Risk Prediction:** 3715AI models analyze proposed changes against historical data to predict potential issues before implementation. One telecommunications provider reduced configuration-related incidents by 73% using predictive analytics. 3716 3717**Anomaly Detection:** 3718Machine learning algorithms continuously monitor network behavior, correlating performance degradation with recent configuration changes. This enables automatic remediation before users notice issues. 3719 3720**Optimization Recommendations:** 3721AI analyzes configuration patterns across thousands of networks to suggest optimizations. Common improvements include security policy consolidation, VLAN optimization, and traffic routing enhancements. 3722 3723### Natural Language Configuration Management 3724 3725The latest advancement allows network engineers to manage configurations using plain English commands: 3726 3727- "Show me all firewall rules added in the last 30 days" 3728- "Restore the Boston office to last Tuesday's configuration" 3729- "Compare current VPN settings with our standard template" 3730 3731This democratizes configuration management, allowing junior engineers to perform complex tasks safely. 3732 3733## Best Practices from Industry Leaders 3734 3735### 1. Adopt a GitOps Mindset 3736 3737Treat your network configurations like software code: 3738- Use branching strategies for testing changes 3739- Implement peer review before production deployment 3740- Maintain detailed commit messages 3741- Create automated testing pipelines 3742 3743### 2. Establish Clear Recovery Objectives 3744 3745Define and regularly test your recovery capabilities: 3746- **Recovery Time Objective (RTO):** How quickly can you restore? 3747- **Recovery Point Objective (RPO):** How much data loss is acceptable? 3748- **Recovery Scope:** Can you restore granularly or only full configs? 3749- **Recovery Validation:** How do you verify successful restoration? 3750 3751### 3. Create Configuration Standards 3752 3753Standardization simplifies automation: 3754- Develop naming conventions for all objects 3755- Create template libraries for common configurations 3756- Document standard operating procedures 3757- Enforce consistency through automation 3758 3759### 4. Implement Progressive Automation 3760 3761Don't try to automate everything at once: 3762- Start with backup automation for critical sites 3763- Add restoration capabilities after proving backups work 3764- Introduce change detection and alerting 3765- Finally, implement predictive analytics 3766 3767## Success Stories: Organizations Leading the Way 3768 3769### Global Retailer Achieves 99.99% Uptime 3770 3771A Fortune 500 retailer managing 2,000+ locations transformed their operations: 3772 3773**Challenge:** Manual processes causing 3-4 major outages monthly 3774**Solution:** Fully automated configuration management with AI-driven predictions 3775**Results:** 3776- 95% reduction in configuration-related incidents 3777- Recovery time improved from hours to minutes 3778- $2.3 million annual savings from prevented downtime 3779- IT team satisfaction increased by 40% 3780 3781### Healthcare Network Ensures Continuous Compliance 3782 3783A 150-site healthcare network automated their compliance workflow: 3784 3785**Challenge:** Manual compliance reporting taking weeks 3786**Solution:** Automated configuration tracking with built-in compliance validation 3787**Results:** 3788- Real-time compliance status dashboards 3789- Audit preparation time reduced by 85% 3790- Zero compliance violations in 18 months 3791- Enabled rapid expansion to new locations 3792 3793### Financial Services Firm Prevents Disasters 3794 3795A major bank prevented potential catastrophes through automation: 3796 3797**Challenge:** Configuration drift causing security vulnerabilities 3798**Solution:** AI-powered drift detection with automatic remediation 3799**Results:** 3800- 47 potential security incidents prevented 3801- Configuration consistency improved to 99.8% 3802- Mean time to detect issues: Under 60 seconds 3803- Estimated risk reduction: $14 million annually 3804 3805## The Path Forward: Your Automation Roadmap 3806
3807### Phase 1: Assessment (Weeks 1-4) 3808- Inventory your current Cisco Meraki environment 3809- Document existing backup and recovery processes 3810- Calculate your current risk exposure 3811- Build the business case for automation 3812 3813### Phase 2: Foundation (Weeks 5-8) 3814- Select an automation platform 3815- Implement basic backup automation 3816- Establish configuration standards 3817- Train your team on new processes 3818 3819### Phase 3: Enhancement (Weeks 9-12) 3820- Add intelligent change detection 3821- Implement automated recovery testing 3822- Create compliance reporting 3823- Introduce predictive analytics 3824 3825### Phase 4: Optimization (Ongoing) 3826- Refine automation based on lessons learned 3827- Expand coverage to all critical systems 3828- Integrate with broader IT operations 3829- Continuously improve based on metrics 3830 3831## Making the Business Case 3832 3833When presenting automation to leadership, focus on: 3834 3835**Quantifiable Benefits:** 3836- Downtime reduction: 90-95% improvement typical 3837- Labor savings: 40+ hours monthly for backup tasks alone 3838- Compliance costs: 70% reduction in audit preparation 3839- Risk mitigation: Prevent average of 2-3 major incidents annually 3840 3841**Strategic Advantages:** 3842- Faster time to market for new services 3843- Improved security posture 3844- Enhanced team productivity 3845- Better customer experience 3846 3847**ROI Calculation:** 3848For a typical 500-device network: 3849- Annual manual management cost: $180,000 3850- Annual automation platform cost: $60,000 3851- Prevented incident savings: $1.2 million 3852- Net annual benefit: $1.32 million 3853- Payback period: Under 60 days 3854 3855## Emerging Trends Shaping the Future 3856 3857### 1. Self-Healing Networks 3858By 2027, industry analysts predict 30% of enterprise networks will self-diagnose and repair configuration issues without human intervention. 3859 3860### 2. Intent-Based Networking 3861Administrators will define business objectives, and AI will automatically generate and maintain optimal configurations. 3862 3863### 3. Quantum-Safe Security 3864Forward-thinking organizations are already implementing quantum-resistant encryption for configuration management. 3865 3866### 4. Digital Twin Technology 3867Virtual network replicas allow risk-free testing of configuration changes before production deployment. 3868 3869## Taking Action: Start Your Automation Journey 3870 3871The evidence is clear: manual Cisco Meraki configuration management is unsustainable in modern networks. Every day without automation increases your risk and costs. 3872 3873**Key Takeaways:** 38741. **The risk is real:** 92% of organizations lack proper automation 38752. **The impact is measurable:** Downtime costs average $5,600-$9,000 per minute 38763. **The solution is proven:** Automated organizations see 95% fewer incidents 38774. **The time is now:** Early adopters gain competitive advantages 3878 3879Don't wait for a configuration disaster to force your hand. Start small, prove value, and scale your automation efforts. Your networkâand your teamâwill thank you. 3880 3881--- 3882 3883*Ready to transform your Cisco Meraki configuration management? Discover how automated backup and restore can protect your network, ensure compliance, and free your team to focus on innovation rather than firefighting.*`},{slug:"network-compliance-biggest-concern",title:"Why Compliance is Now the #1 Network Management Concern",excerpt:"72% of organizations report compliance has overtaken performance as their primary concern. With fines reaching â¬345 million and teams juggling 13+ frameworks, manual compliance is no longer viable.",date:"2025-06-20",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Compliance",tags:["Compliance","ISO27001","NetworkSecurity","AuditReady","GDPR","SOX"],coverImage:"https://images.unsplash.com/photo-1450101499163-c8848c66ca85?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"7 min",content:` 3884Remember when network uptime was your biggest worry? Those days are gone. In 2025, 72% of organizations report that c
3884ompliance has overtaken performance as their primary network management concern. With regulatory fines reaching record highsâincluding a staggering â¬345 million GDPR penalty in early 2025âthe stakes have never been higher for network teams managing Cisco infrastructure. 3885 3886Here's what keeps CISOs awake at night: the average organization now juggles compliance requirements from 13 different regulatory frameworks, while 63% have already implemented zero-trust architectures just to keep pace with evolving mandates. If you're managing a Cisco network without automated compliance capabilities, you're essentially flying blind in a storm of regulatory requirements. 3887 3888## The $5 Million Wake-Up Call 3889 3890Colonial Pipeline's $5 million TSA penalty in 2024 sent shockwaves through the industry. The message was clear: network security failures are now compliance failures, and regulators aren't playing games. But here's what most organizations missâthe fine is just the tip of the iceberg. 3891 3892Consider the real costs of compliance failures: 3893- **Immediate penalties**: Average GDPR fines increased 168% year-over-year in 2024 3894- **Remediation costs**: Organizations spend an average of $4.2 million on post-breach compliance remediation 3895- **Lost business**: 78% of enterprises report losing contracts due to compliance gaps 3896- **Audit fatigue**: Manual compliance checks consume 2,800 hours annually for the average enterprise 3897 3898The math is simple: prevention through automation costs pennies compared to the dollars spent on remediation. 3899 3900## The Cisco Compliance Challenge: Why Traditional Approaches Fail 3901 3902Managing compliance across Cisco infrastructure presents unique challenges. Whether you're running DNA Center, ACI, or traditional IOS devices, each platform has its own configuration syntax, compliance requirements, and audit trails. Our research shows that 84% of Cisco environments suffer from configuration drift within 30 days of deployment. 3903 3904Here's why traditional compliance approaches fail in Cisco environments: 3905 3906### 1. **Configuration Complexity** 3907A single Cisco Catalyst 9300 switch can have over 10,000 configuration lines. Multiply that across hundreds of devices, and manual compliance checking becomes impossible. DNA Center's compliance features help, but they're limited to devices under its managementâleaving gaps in hybrid environments. 3908 3909### 2. **Multi-Framework Chaos** 3910Modern Cisco networks must simultaneously satisfy: 3911- **ISO 27001**: Requiring documented network controls and regular audits 3912- **SOX**: Mandating change control and separation of duties 3913- **HIPAA**: Enforcing encryption and access controls 3914- **PCI DSS**: Demanding network segmentation and quarterly scans 3915- **Zero Trust**: The new baseline requiring microsegmentation and continuous verification 3916 3917Each framework interprets "compliant" differently, creating a compliance matrix that would make a chess grandmaster dizzy. 3918 3919### 3. **The Audit Time Bomb** 3920Industry analysis reveals that organizations using manual compliance processes spend 70% more time on audits than those with automation. During a typical audit, network teams scramble to: 3921- Generate configuration reports across multiple platforms 3922- Prove no unauthorized changes occurred 3923- Document every deviation from baseline 3924- Map technical controls to regulatory requirements 3925 3926Without automation, this process consumes weeks of productivity and still leaves room for human error. 3927 3928## The Hidden Costs Nobody Talks About 3929 3930Beyond the obvious penalties, non-compliance creates cascading costs that CFOs are just beginning to understand: 3931
3932### **Innovation Paralysis** 3933When 58% of network changes are delayed due to compliance concerns, innovation grinds to a halt. Teams become so focused on maintaining compliance that they can't implement improvements that would actually enhance security. 3934 3935### **Technical Debt Accumulation** 3936Fear of compliance violations leads to "configuration hoarding"âkeeping outdated rules and policies because nobody's sure if removing them might trigger a violation. This technical debt compounds over time, making networks harder to manage and more vulnerable to attacks. 3937 3938### **Talent Drain** 3939Network engineers didn't sign up to be compliance officers. Yet they spend 40% of their time on compliance-related tasks. The result? Burnout, turnover, and difficulty attracting top talent who want to innovate, not document. 3940 3941## Real-World Success: How Leaders Are Winning the Compliance Game 3942 3943Let's look at how forward-thinking organizations are transforming compliance from a burden into a competitive advantage: 3944 3945### **Financial Services Giant Cuts Audit Time by 85%** 3946A Fortune 500 bank with 2,000+ Cisco devices implemented automated compliance checking across their DNA Center and ACI environments. Results: 3947- Audit preparation time dropped from 6 weeks to 1 week 3948- Configuration violations detected and remediated in real-time 3949- $2.3 million saved annually in audit costs alone 3950 3951### **Healthcare Network Achieves Continuous Compliance** 3952A major hospital system managing HIPAA, HITECH, and state regulations automated their compliance workflows. The impact: 3953- 100% visibility into configuration changes 3954- Zero compliance violations in their last three audits 3955- 60% reduction in security incidents due to proactive compliance 3956 3957### **Retail Chain Masters PCI DSS** 3958With 500 locations and strict PCI requirements, this retailer automated network segmentation verification and configuration compliance. They now: 3959- Pass PCI audits in half the time 3960- Detect and remediate violations within minutes, not days 3961- Save $800,000 annually on compliance consultants 3962 3963## The Automation Advantage: Your Compliance Game Plan 3964 3965The evidence is overwhelming: 55% of organizations plan to invest in AI-driven compliance monitoring in 2025. Here's your roadmap to joining the winners: 3966 3967### **Step 1: Establish Baseline Visibility** 3968You can't manage what you can't see. Modern compliance starts with: 3969- Real-time configuration monitoring across all Cisco platforms 3970- Automated backup and version control 3971- Change detection with instant alerting 3972 3973### **Step 2: Implement Policy-as-Code** 3974Transform compliance requirements into automated checks: 3975- Convert regulatory requirements into technical policies 3976- Automate verification across your entire network 3977- Generate audit-ready reports on demand 3978 3979### **Step 3: Enable Continuous Compliance** 3980Move from periodic audits to continuous verification: 3981- Real-time drift detection and remediation 3982- Automated compliance scoring 3983- Predictive analytics to prevent violations before they occur 3984 3985### **Step 4: Integrate with Existing Tools** 3986Your compliance solution should enhance, not replace, your Cisco investments: 3987- Leverage DNA Center APIs for unified management 3988- Integrate with ACI for data center compliance 3989- Support traditional IOS devices without DNA Center 3990 3991## The ROI of Automated Compliance 3992 3993Let's talk numbers. Organizations implementing automated compliance report: 3994- **250% ROI** over three years 3995- **70% reduction** in manual compliance tasks 3996- **45% fewer** security incidents 3997- **30% faster** audit cycles 3998 3999But the real value? Peace of mind. When compliance is automated, your team can focus on what they do bestâbuilding and optimizing networks that drive business value. 4000 4001## Looking Ahead: Compliance in 2025 and Beyond 4002 4003The regulatory landscape isn't slowing down. New requirements on the horizon include: 4004 4005### **SEC Cybersecurity Rules** 4006Public companies must now disclose material cybersecurity incidents within 4 days and describe their risk management practices. Network teams need audit trails proving their compliance posture at any point in time. 4007 4008### **AI and Network Compliance** 4009As AI-driven network management becomes standard, regulators are developing frameworks for "explainable AI" in critical infrastru
4009cture. Your compliance tools need to evolve accordingly. 4010 4011### **Environmental Compliance** 4012The EU's Corporate Sustainability Reporting Directive now links network efficiency to ESG reporting. Energy-efficient network configurations aren't just good practiceâthey're becoming mandatory. 4013 4014## Take Action: Your 90-Day Compliance Transformation 4015 4016Stop treating compliance as a necessary evil. Here's your action plan: 4017 4018**Days 1-30: Assess and Baseline** 4019- Inventory all Cisco devices and their compliance requirements 4020- Identify configuration drift and policy violations 4021- Calculate your current compliance costs 4022 4023**Days 31-60: Implement Quick Wins** 4024- Deploy automated configuration backup and monitoring 4025- Create compliance templates for common requirements 4026- Automate your most painful manual checks 4027 4028**Days 61-90: Scale and Optimize** 4029- Extend automation across your entire infrastructure 4030- Integrate compliance into your change management process 4031- Generate your first automated audit report 4032 4033## The Bottom Line 4034 4035Compliance has evolved from a checkbox exercise to a strategic imperative. Organizations that embrace automated compliance gain more than regulatory approvalâthey gain operational efficiency, reduced risk, and the freedom to innovate. 4036 4037The question isn't whether you'll automate complianceâit's whether you'll do it before or after your next audit. With regulatory penalties skyrocketing and automation ROI proven, the choice is clear. 4038 4039Ready to transform your Cisco network compliance from a burden into a competitive advantage? The tools exist. The ROI is proven. The only thing missing is your decision to act.`},{slug:"true-cost-of-network-configuration-loss",title:"The True Cost of Network Configuration Loss: Why Manual Recovery is No Longer Viable",excerpt:"In 2025, 67.7% of businesses experienced significant data loss. When network configs fail at $9,000/minute, manual recovery isn't just outdatedâit's financially reckless.",date:"2025-05-15",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Best Practices",tags:["NetworkManagement","DisasterRecovery","CiscoMeraki","BusinessContinuity"],coverImage:"https://images.unsplash.com/photo-1451187580459-43490279c0fa?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"6 min",content:` 4040Picture this: It's 2:48 AM. Your phone buzzes with an urgent alert. A critical switch has failed, taking down half your network. Your team scrambles to find the last working configuration while support tickets flood in at $9,000 per minute. Sound familiar? 4041 4042You're not alone. In 2025, **67.7% of businesses experienced significant data loss**, with network misconfigurations ranking as the leading culprit. The old playbook of manual recovery? It's not just outdatedâit's financially reckless. 4043 4044## The $5.4 Billion Wake-Up Call 4045 4046The numbers don't lie, and they're getting worse. When CrowdStrike's configuration error brought down systems worldwide in July 2024, it cost Fortune 500 companies **$5.4 billion in just 19 hours**. But here's the kicker: that was just one incident. 4047 4048Consider these sobering statistics from 2025: 4049 4050- **51% of organizations** now report monthly losses exceeding $1 million due to network outages 4051- The average IT downtime cost has climbed to **$9,000 per minute** (that's $540,000 per hour) 4052- **86% of incidents** involve significant business disruption beyond just downtime 4053- Recovery times for configuration-related issues average **22 days** when done manually 4054 4055And here's the real shocker: **93% of companies** that experience prolonged data loss go bankrupt. Let that sink in. 4056 4057## The Hidden Multiplier Effect 4058 4059When Cloudflare's 1.1.1.1 DNS resolver went dark for 62 minutes in July 2025 due to a configuration error that had been dormant for 38 days, it wasn't just about lost DNS queries. For millions of users, the entire internet effectively disappeared. 4060 4061This cascading failure illustrates a crucial point: configuration loss doesn't just impact your networkâit creates a domino effect that multiplies costs exponentially: 4062 4063**Direct Costs:** 4064- Lost revenue: $5,600-$9,000 per minute (industry average) 4065- Emergency IT support: $300-$500 per hour per technician 4066- Hardware replacement: $10,000-$50,000 per device 4067 4068**Hidden Costs:** 4069- Employee downtime: $0.67 per minute per affected employee 4070- Customer churn: 32% of customers switch providers after major outages 4071- Compliance penalties: Up to $50 million for regulatory violations 4072- Reputation damage: 73% of businesses report lasting brand impact 4073 4074## Why Manual Recovery Methods Are Failing 4075 4076Remember when keeping configuration backups in spreadsheets and email threads seemed reasonable? Those days are gone. Here's why traditional approaches are crumbling: 4077 4078### 1. **The Complexity Explosion**
4079Modern Cisco infrastructures aren't your father's networks. Today's environments feature: 4080- 10x more devices than a decade ago 4081- Multi-vendor integrations requiring specialized knowledge 4082- Cloud-hybrid architectures with dynamic configurations 4083- Automated systems that change configs hundreds of times daily 4084 4085Manual tracking? Impossible. 4086 4087### 2. **The Speed-to-Recovery Gap** 4088In nearly **one in five cases**, data exfiltration happens within the first hour of compromise. But manual recovery typically involves: 4089- 2-4 hours to locate the correct backup 4090- 3-6 hours to verify configuration integrity 4091- 4-8 hours to implement and test recovery 4092- 24-48 hours for full service restoration 4093 4094That's a minimum 9-hour recovery window when every minute costs thousands. 4095 4096### 3. **The Human Error Factor** 4097Industry research shows that **over 80% of network problems** stem from improper configuration and change management issues. When you're manually recovering configurations at 3 AM under pressure, error rates skyrocket: 4098- 65% chance of introducing new misconfigurations 4099- 40% likelihood of missing critical dependencies 4100- 28% probability of version mismatch issues 4101 4102## Real-World Configuration Disasters: Learning from the Fallen 4103 4104**Case Study 1: The Dormant Time Bomb** 4105When a major CDN provider's configuration error sat undetected for 38 days before triggering a global outage, it highlighted a critical vulnerability: legacy configs can hide like landmines in your network. The result? 70 countries affected, millions in losses, and a stark reminder that manual configuration management is playing with fire. 4106 4107**Case Study 2: The Cascade Effect** 4108A Fortune 500 healthcare company learned this lesson the hard way. A single misconfigured BGP route leaked upstream, propagating through their service provider and affecting 300+ networks. Recovery time: 31 hours. Cost: $14.2 million. Cause: No automated configuration validation. 4109 4110## The Automation Advantage: From Hours to Minutes 4111 4112Here's where the game changes. Modern automated configuration backup and recovery solutions transform disaster scenarios into minor hiccups: 4113 4114**Traditional Manual Recovery:** 4115- Detection time: 45-90 minutes 4116- Recovery initiation: 2-4 hours 4117- Full restoration: 24-72 hours 4118- Success rate: 68% 4119 4120**Automated Recovery:** 4121- Detection time: <1 minute 4122- Recovery initiation: 5-15 minutes 4123- Full restoration: 30-120 minutes 4124- Success rate: 97% 4125 4126The math is simple: automation reduces recovery time by 92% while increasing success rates by 43%. 4127 4128## Building Your Configuration Resilience Strategy 4129 4130Smart organizations are implementing three key strategies: 4131 4132### 1. **Continuous Configuration Capture** 4133- Real-time backup of every configuration change 4134- Version control with granular rollback capabilities 4135- Automated change detection and alerting 4136 4137### 2. **Intelligent Recovery Orchestration** 4138- One-click restoration to any point in time 4139- Automated dependency mapping 4140- Pre-validated recovery scenarios 4141 4142### 3. **Proactive Configuration Governance** 4143- Compliance checking against best practices 4144- Drift detection and remediation 4145- Automated documentation generation 4146 4147## The ROI is Undeniable 4148 4149Let's talk numbers. For a mid-sized enterprise with 500 network devices: 4150 4151**Annual Manual Management Costs:** 4152- Configuration tracking: $180,000 (3 FTEs) 4153- Average downtime costs: $2.4 million (4 major incidents) 4154- Compliance audit preparation: $75,000 4155- **Total: $2,655,000** 4156 4157**Annual Automated Solution Costs:** 4158- Platform licensing: $120,000 4159- Reduced downtime costs: $240,000 (90% reduction) 4160- Compliance automation: $15,000 4161- **Total: $375,000** 4162 4163**Net Annual Savings: $2,280,000** 4164**ROI: 760%** 4165**Payback Period: 1.6 months** 4166 4167## Your Next 48 Hours: An Action Plan 4168 4169The clock is ticking. Here's your roadmap to configuration resilience: 4170 4171**Hour 1-4:** Audit your current configuration management process. Document every gap. 4172 4173**Hour 5-12:** Calculate your actual downtime costs using this formula: 4174- (Annual Revenue ÷ 525,600 minutes) à Average Recovery Time à Number of Incidents 4175 4176**Hour 13-24:** Evaluate automated backup solutions against these criteria: 4177- Real-time capture capabilities 4178- Cisco-native integration depth 4179- Recovery time objectives 4180- Compliance reporting features 4181 4182**Hour 25-48:** Implement a proof of concept focusing on your most critical devices. 4183 4184## The Future is Automated (Whether You're Ready or Not) 4185 4186As we head deeper into 2025, the gap between organizations with automated configuration management and those without will become a chasm. With 70% of security incidents now targeting multiple attack surfaces simultaneously, manual recovery isn't just slowâit's a liability. 4187 4188The question isn't whether you'll automate your configuration backup and recovery. It's whether you'll do it before or after your next major outage. 4189 4190Remember: In a world where every minute of downtime costs $9,000, the most expensive backup solution is the one you don't have when you need it. And in today's threat landscape, that moment is closer than you think. 4191 4192--- 4193 4194*Ready to transform your network configuration management from a vulnerability into a competitive advantage? The time for half-measures has passed. Your networkâand your businessâdeserve better than manual recovery in an automated world.*`}],es:[{slug:"what-weve-built-since-three-products-one-mission",title:"Lo Que Construimos Desde Entonces: Tres Productos, Una Misión",excerpt:"Hace unos meses afirmamos que la IA podÃa construir cualquier cosa sobre redes Cisco. Des
4194de entonces estuvimos cabeza abajo, hablando con equipos de red, MSPs y lÃderes de TI empresarial, y convirtiendo lo que escuchamos en productos. Esta es la actualización: Config Backup & Restore, el Agente de Cumplimiento y Selent MCP, ahora open source.",date:"2026-09-18",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Producto",tags:["Cisco Meraki","Backup de Configuración","Cumplimiento","Selent MCP","Código Abierto","Agentes de IA","Automatización de Redes","MSP"],coverImage:"https://images.unsplash.com/photo-1519389950473-47ba0277781c?ixlib=rb-4.0.3&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"4 min",content:` 4195Hace unos meses hicimos una afirmación audaz: que la [AI](https://pento.ai) podÃa construir cualquier cosa sobre redes Cisco. Después explicamos por qué tu red ya tiene las respuestas, y cómo nuestro motor convierte esa promesa en soluciones que funcionan. 4196 4197Desde entonces estuvimos cabeza abajo. Dedicamos el tiempo a hablar con equipos de red, MSPs y lÃderes de TI empresarial, y a convertir lo que escuchamos en productos. Este post es la actualización. 4198 4199## Lo que escuchamos una y otra vez 4200 4201Las conversaciones volvÃan siempre a las mismas frustraciones. 4202 4203Los equipos de red que operan Cisco Meraki nos dijeron que algunas de las tareas operativas más crÃticas siguen sin tener una respuesta nativa. Respaldar y restaurar configuraciones es un ejemplo. Replicar una configuración probada en sitios nuevos es otro. 4204 4205Los lÃderes de TI nos dijeron que el cumplimiento sigue siendo un simulacro de incendio trimestral. Alguien audita las configuraciones a mano, escribe un informe y vuelve a empezar tres meses después. 4206 4207Los ingenieros y SEs nos dijeron que quieren hablarle a su infraestructura en lenguaje natural, sin escribir un script nuevo para cada pregunta. 4208 4209Son tres problemas distintos, y construimos un producto para cada uno. 4210 4211--- 4212 4213## Producto 01 â Config Backup & Restore, impulsado por IA 4214 4215La configuración es la memoria de tu red. Cuando un cambio sale mal, cuando falla un dispositivo o cuando hay que reconstruir un sitio, necesitas que esa memoria esté completa y sea recuperable. 4216 4217Selent Config Backup & Restore captura tus configuraciones de Meraki y te permite volver atrás con confianza. Y va más allá de la recuperación: 4218 4219**Clonado de redes** â toma una configuración que funciona y replÃcala en sitios nuevos. No tienes que reconstruirla a mano. 4220 4221**Despliegue masivo de switches** â aprovisiona switches a escala desde una lÃnea base confiable, en una fracción del tiempo. 4222 4223Para organizaciones que crecen en muchas ubicaciones, esto cambia la forma en que se ponen en marcha los sitios nuevos. Cada uno arranca desde un estándar probado, asà nadie tiene que reinventarlo. 4224 4225--- 4226 4227## Producto 02 â El Agente de Cumplimiento 4228 4229Nuestra primera IA Agéntica Especializada es ahora un producto por derecho propio. 4230 4231El Agente de Cumplimiento de Selent analiza las configuraciones de tu red frente a los estándares que tu organización debe cumplir, como PCI DSS, polÃticas internas de seguridad y reglas de gobernanza propias. Te dice si tu entorno cumple, te muestra dónde no lo hace y te explica qué corregir. 4232 4233El cambio es de periódico a persistente. El cumplimiento deja de ser el proyecto que tu equipo teme cada trimestre y pasa a ser una capa que sigue trabajando en segundo plano. Cuando llegan los auditores, las respuestas ya están ahÃ. 4234 4235--- 4236 4237## Producto 03 â Selent MCP, ahora open source 4238 4239Selent MCP conecta la IA con tu infraestructura Cisco Meraki. Expone dinámicamente más de 400 endpoints de la API de Meraki a través de lenguaje natural. 4240 4241Funciona con los clientes de IA que los equipos ya usan, incluidos Claude, ChatGPT y Cisco AI Assistant. Y liberamos una versión open source para la comunidad de ingenieros de red, SEs y desarrolladores que construyen sobre Meraki. 4242 4243Creemos que el ecosistema se fortalece cuando quienes construyen tienen mejores herramientas. Abrir el MCP es nuestra contribución a eso. 4244 4245--- 4246 4247## Lo que no cambió 4248 4249Estos tres productos nacen de la misma idea con la que empezamos: 4250 4251> **Cada red es diferente, y la IA que la opera también deberÃa serlo.** 4252 4253Los productos resuelven los problemas que vimos una y otra vez. El desarrollo a medida sigue siendo el centro de lo que hacemos. Cuando tu equipo necesita algo que ningún producto cubre, como una integración especÃfica, un dashboard, un flujo de trabajo o una automatización, lo construimos para tu entorno, tu industria y tu escala. 4254 4255## Construido dentro del ecosistema Cisco 4256 4257Selent es Cisco Technology Partner y está listada en el Cisco Marketplace. Todo lo que construimos corre sobre la infraestructura Cisco en la que ya confÃas, y está diseña
4257do para extender esa infraestructura, no para reemplazarla. 4258 4259## Qué sigue 4260 4261En las próximas semanas vamos a profundizar en cada producto. Veremos cómo funciona el Agente de Cumplimiento en la práctica, por qué el backup de configuración es un riesgo mayor de lo que la mayorÃa de los equipos cree, y cómo los MSPs están escalando operaciones con Selent. También compartiremos casos de uso por industria. 4262 4263Si alguno de estos problemas te suena familiar, nos gustarÃa escucharte. 4264 4265--- 4266 4267*Conoce más en [selent.ai](https://www.selent.ai) o encuéntranos en el [Cisco Marketplace](https://marketplace.cisco.com).* 4268`},{slug:"ia-redes-tu-red-ya-tiene-todas-las-respuestas",title:"IA + Redes: Tu red ya tiene todas las respuestas. Solo tienes que preguntar.",excerpt:"La mayorÃa de las empresas han invertido millones en su infraestructura Cisco, y luego se detuvieron. Los datos ya están ahÃ. La inteligencia ya está ahÃ. Lo único que falta es construir sobre ella.",date:"2026-03-17",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"AI Development",tags:["IA","Cisco","Automatización de Redes","Desarrollo Personalizado","Redes Empresariales","Cisco Meraki","Transformación Digital","Servicios Gestionados"],coverImage:"https://images.unsplash.com/photo-1558494949-ef010cbdcc31?ixlib=rb-4.0.3&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"5 min",content:` 4269La mayorÃa de las empresas han invertido millones en su infraestructura Cisco. Y luego se detuvieron. La administran, la gestionan, la parchean. Pero nunca construyen sobre ella. 4270 4271Ahà es donde tus competidores están a punto de dejarte atrás. 4272 4273## La pregunta que nadie hace 4274 4275Hay una verdad incómoda en cada sala de directivos. El CTO presenta el presupuesto de red. El CISO presenta la postura de cumplimiento. El CFO revisa los números. Y en algún punto de esa conversación, nadie hace la pregunta que más importa: 4276 4277*"¿Qué nos está diciendo nuestra red realmente, y qué podrÃa hacer si la dejáramos?"* 4278 4279Tu infraestructura Cisco genera datos cada segundo. Patrones de tráfico, comportamiento de dispositivos, anomalÃas, señales de rendimiento, eventos de seguridad, uso por ubicación, por usuario, por aplicación. En todo sentido significativo, es uno de los sistemas más ricos en información de tu organización. 4280 4281Y en la mayorÃa de las empresas, esa inteligencia no va a ningún lado. Alimenta un dashboard que nadie lee. Dispara alertas que nadie atiende. Vive en logs que se rotan y se olvidan. 4282 4283Este no es un problema tecnológico. Es un problema de construcción. 4284 4285## Tu red es una plataforma. Empieza a construir sobre ella. 4286 4287Las herramientas genéricas de gestión de redes fueron diseñadas para la empresa promedio. Tu empresa no es promedio. Tus requisitos de cumplimiento, tus flujos operacionales, tus regulaciones de industria, tu postura de seguridad, nada de esto es promedio. Entonces, ¿por qué estás usando software genérico sobre una infraestructura sofisticada? 4288 4289Los lÃderes de IT y operaciones más avanzados están apostando diferente. En lugar de esperar a que un proveedor lance una funcionalidad que casi cubre su necesidad, están encargando soluciones personalizadas construidas directamente sobre su infraestructura Cisco, soluciones que hablan su idioma, automatizan sus flujos reales e integran los sistemas que ya usan. 4290 4291No son implementaciones de ERP de 18 meses. Son construcciones puntuales: 4292 4293- Un script de automatización que elimina una tarea manual que le cuesta a un ingeniero dos horas por semana 4294- Un dashboard de cumplimiento que muestra al auditor exactamente lo que necesita, en tiempo real, sin exportaciones manuales 4295- Una herramienta de monitoreo que aprende qué es normal en tu entorno y detecta anomalÃas antes de que tus clientes las noten 4296 4297## Lo que se construye varÃa según la industria 4298 4299El patrón es consistente en todos los sectores: hay un flujo de trabajo manual, lento o invisible. Los datos para resolverlo ya existen dentro de la red. Lo que faltaba era la construcción. 4300 4301**Salud:** Monitoreo de cumplimiento de dispositivos en tiempo real en redes clÃnicas, marcando automáticamente dispositivos no autorizados antes de que lo haga una auditorÃa HIPAA. 4302
4303**Retail y Hospitalidad:** Dashboards de análisis de Wi-Fi para visitantes que alimentan datos de tráfico peatonal directamente en la toma de decisiones de marketing y operaciones. 4304 4305**Servicios Financieros:** UIs de control de segmentación de red personalizadas que permiten a los equipos de cumplimiento aplicar polÃticas sin tocar el CLI. 4306 4307**Manufactura:** Monitoreo de convergencia OT/IT, integrando la visibilidad de tecnologÃa operacional en los planos de control de red para mantenimiento predictivo. 4308 4309**Servicios Gestionados:** Marcos de automatización multi-tenant que permiten a los MSPs aprovisionar, configurar y reportar sobre entornos de clientes en minutos, no horas. 4310 4311**Educación:** Análisis de ancho de banda por edificio y por piso que ayudan a las operaciones del campus a entender la utilización y planificar inversiones en infraestructura. 4312 4313Cada una de estas soluciones fue construida sobre datos que ya existÃan. La infraestructura ya estaba generando las señales. La única pieza faltante era un equipo dispuesto a construir. 4314 4315## Agentes de IA y expertos en Cisco. Juntos. 4316 4317Selent.AI fue creado exactamente para este momento. Combinamos desarrollo impulsado por IA con profunda experiencia en redes Cisco para construir soluciones personalizadas sobre tu infraestructura existente, rápido, preciso y calibrado a tu entorno. 4318 4319Esto no es IA como un truco de marketing. Los agentes de IA manejan la iteración, la generación de código, el reconocimiento de patrones en los datos de tu red. Los expertos humanos en Cisco manejan las decisiones de arquitectura, los casos extremos, las integraciones que requieren un juicio que ningún modelo puede reemplazar. El resultado es una capacidad de desarrollo que se mueve a velocidad de IA con la confiabilidad de la experiencia certificada. 4320 4321**Cómo funciona:** 4322 4323**01. Empezamos con tu dolor operacional especÃfico.** No una plantilla de caso de uso genérico, no un roadmap de proveedor. Tu problema real. 4324 4325**02. Diseñamos una solución que se asienta sobre tu infraestructura Cisco,** Meraki, Catalyst, o ambas, e integra con tus herramientas existentes. 4326 4327**03. La construimos.** Scripts de automatización, dashboards de análisis, UIs de control, herramientas de cumplimiento, sistemas de monitoreo, integraciones con terceros. Lo que el problema requiera. 4328 4329**04. Es tuya.** No es una suscripción SaaS con un modelo de precios opaco y un roadmap de funcionalidades que no puedes influenciar. Es tuya. 4330 4331## Las empresas que lideran son las que construyen 4332 4333Las empresas que definirán sus industrias en los próximos cinco años no son las que tienen los presupuestos más grandes ni los contratos de proveedores más sofisticados. Son las que dejaron de esperar a que el producto correcto apareciera en un roadmap, y empezaron a construir sobre la infraestructura que ya tienen. 4334 4335Tu red Cisco no es solo un centro de costos. Es una plataforma. Está generando datos que tu equipo de operaciones necesita, que tu equipo de cumplimiento necesita, que tus clientes necesitan, que tu liderazgo necesita. 4336 4337Los datos ya están ahÃ. La inteligencia ya está ahÃ. Lo único que falta es la construcción. 4338 4339Tu red está lista. La única pregunta es si tú lo estás. 4340 4341--- 4342 4343*Cuéntanos el problema. Nosotros construimos la solución. Comparte con qué estás trabajando, tu entorno, tu desafÃo, tu objetivo, y nuestro equipo te responderá con una propuesta concreta de cómo podrÃa verse una construcción personalizada sobre tu infraestructura Cisco. [selent.ai](https://www.selent.ai)* 4344`},{slug:"network-scaling-operations-model-cisco-meraki",title:"Tu Red Está Escalando, ¿Tu Modelo de Operaciones Escala Con Ella?",excerpt:"Las redes empresariales crecen más rápido que nunca con más sucursales, aplicaciones en la nube y dispositivos IoT. Pero la mayorÃa de los modelos de operaciones no han seguido el ritmo. Descubre por qué la inteligencia operativa es clave para escalar entornos Cisco Meraki con confianza.",date:"2026-02-13",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Operaciones de Red",tags:["Cisco Meraki","Network Scaling","AIOps","Configuration Management","Compliance","Network Automation","Enterprise IT","Operational Intelligence"],coverImage:"https://images.unsplash.com/photo-1451187580459-43490279c0fa?ixlib=rb-4.0.3&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"4 min",content:` 4345En los últimos cinco años, las redes empresariales se han transformado. Más sucursales. Más aplicaciones en la nube. Más usuarios remotos. Más dispositivos IoT. Más cambios constantes de configuración.
4346 4347Pero aquà está la verdad incómoda: **la mayorÃa de los modelos de operaciones de red no han evolucionado al mismo ritmo.** 4348 4349## El Verdadero Cuello de Botella No Es el Hardware, Son las Operaciones 4350 4351Cisco Meraki hace que el despliegue de redes sea más fácil que nunca. Puedes implementar: 4352 4353- Nuevas sucursales en horas 4354- SD-WAN en múltiples regiones 4355- Wi-Fi seguro en cientos de sitios 4356 4357Pero la madurez operativa es donde muchas organizaciones se quedan atrás. Preguntas que escuchamos con frecuencia: 4358 4359- ¿Quién aprobó ese cambio de configuración? 4360- ¿Cuándo se tomó el último respaldo? 4361- ¿Por qué este sitio se ve diferente a la plantilla estándar? 4362- ¿Podemos restaurar la versión funcional de la semana pasada, ahora mismo? 4363 4364Cuando el crecimiento se acelera, los procesos manuales se convierten en riesgos invisibles. 4365 4366## La Velocidad de Cambio Es la Nueva Superficie de Riesgo 4367 4368Las redes modernas no solo crecen, cambian constantemente. Las reglas de firewall se actualizan, las VLANs se modifican, los SSIDs se ajustan, los pares VPN se agregan y los permisos de administrador evolucionan. 4369 4370Cada cambio aumenta la entropÃa. Sin visibilidad automatizada y barreras de protección, **la deriva de configuración se vuelve inevitable.** 4371 4372Y la deriva conduce a: 4373 4374- **Brechas de seguridad** que exponen a la organización a amenazas 4375- **Exposición regulatoria** en múltiples marcos de cumplimiento 4376- **Rendimiento inconsistente** entre sitios 4377- **Interrupciones difÃciles de diagnosticar** que consumen tiempo de ingenierÃa 4378 4379El problema no es el cambio. El problema es el cambio no gestionado. 4380 4381## Inteligencia Operativa Sobre Supervisión Manual 4382 4383Ningún equipo, por más talentoso que sea, puede rastrear manualmente cada cambio de configuración en docenas o cientos de sitios. Lo que se requiere es inteligencia operativa: 4384 4385- **Snapshots de configuración automatizados** capturados de forma continua 4386- **Detección continua de deriva** en todas las redes gestionadas 4387- **AuditorÃa estructurada de cambios** con trazabilidad completa 4388- **Capacidades de rollback instantáneo** a cualquier estado previo conocido 4389- **Comparación histórica entre versiones** para análisis de causa raÃz 4390- **Validación de polÃticas a escala** para cumplir con lÃneas base de compliance 4391 4392Aquà es donde el AIOps moderno pasa de ser "algo deseable" a infraestructura fundamental. 4393 4394## Escalando Entornos Cisco Meraki Con Confianza 4395 4396Selent fue diseñado para ayudar a las organizaciones basadas en Cisco Meraki a operar con confianza a escala. 4397 4398A medida que tu red crece, Selent asegura: 4399 4400- **Cada configuración se respalda continuamente**, sin intervención manual requerida 4401- **Cada cambio es rastreado**, proporcionando auditorÃas completas para cumplimiento y resolución de problemas 4402- **Cada desviación es visible**, para que la deriva nunca pase desapercibida 4403- **Cada restauración puede ocurrir en segundos**, minimizando el tiempo de inactividad cuando surgen problemas 4404 4405No porque algo haya fallado, sino porque las operaciones maduras anticipan la complejidad antes de que se convierta en un problema. 4406 4407## El Nuevo Estándar para el Liderazgo en Redes 4408 4409Los lÃderes de TI con visión de futuro están cambiando su mentalidad: 4410 4411- De la **resolución reactiva de problemas** a la **resiliencia proactiva** 4412- Del **control manual** a la **gobernanza automatizada** 4413- De las **brechas de visibilidad** a la **inteligencia operativa continua** 4414 4415El futuro de las operaciones de red no es solo hardware más rápido. Es supervisión más inteligente, impulsada por automatización inteligente que escala junto con tu infraestructura. 4416 4417## Reflexión Final 4418 4419Si tu entorno Cisco Meraki está en expansión, tu modelo operativo debe evolucionar con él. Escalar infraestructura sin escalar la inteligencia operativa es construir velocidad sin control. 4420 4421Selent ayuda a los equipos de red modernos a operar al ritmo del crecimiento, sin sacrificar estabilidad, seguridad ni cumplimiento. 4422`},{slug:"protect-your-cisco-meraki-networks-before-its-too-late",title:"Protege tus Redes Cisco Meraki Antes de que Sea Demasiado Tarde",excerpt:"Un pequeño error no deberÃa tumbar toda tu red. En las redes modernas gestionadas en la nube, un solo clic puede cambiarlo todo. Descubre por qué la mala configuración es la principal causa de tiempo de inactividad y cómo proteger tu infraestructura.",date:"2026-02-03",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Operaciones de Red",tags:["Cisco Meraki","Gestión de Configuración","Recuperación ante Desastres","Backup y Restauración","Seguridad de Red","MSP","TI Empresarial"],coverImage:"https://images.unsplash.com/photo-1558494949-ef010cbdcc31?ixlib=rb-4.0.3&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"4 min",content:` 4423**Un pequeño error no deberÃa tumbar toda tu red.** 4424 4425En las redes modernas gestionadas en la nube, un solo clic puede cambiarlo todo. 4426 4427Una edición de VLAN. Una actualización de regla de firewall. Un push de plantilla a cientos de sitios. 4428 4429Y de repente: 4430 4431- Las tiendas pierden conectividad 4432- Los APs se desconectan 4433- Las VPNs se rompen 4434- Los equipos no pueden procesar pagos ni acceder a los sistemas 4435 4436Si gestionas infraestructura distribuida â sucursales de retail, campus, clÃnicas, almacenes o clientes gestionados por MSP â ya lo sabes: 4437 4438**El tiempo de inactividad ya no viene de fallas de hardware. Viene de errores de configuración.** 4439 4440Por eso exactamente construimos Selent. 4441 4442## El Riesgo Oculto en las Redes Gestionadas en la Nube 4443 4444Las plataformas gestionadas en la nube como Meraki son increÃblemente poderosas. Pero ese poder también aumenta el radio de impacto. 4445 4446Cuando: 4447 4448- Aplicas plantillas 4449- Editas polÃticas en masa 4450- Automatizas cambios 4451- Gestionas cientos o miles de dispositivos 4452 4453Un solo cambio incorrecto puede propagarse a todos lados en segundos. 4454 4455Y aquà está la verdad incómoda: 4456 4457**Meraki no proporciona restauración instantánea, completa y point-in-time de configuración de forma nativa.** 4458 4459Asà que los equipos terminan: 4460 4461- Reconstruyendo configuraciones manualmente 4462- Buscando en los registros de cambios 4463- Copiando configuraciones de memoria 4464- Abriendo casos de soporte urgentes 4465 4466Todo mientras el negocio está caÃdo. 4467 4468## ¿Qué Causa Realmente la MayorÃa de las Interrupciones? 4469
4470Por lo que vemos en MSPs y equipos de TI empresarial, los incidentes usualmente vienen de: 4471 4472### 1. Error Humano 4473 4474- VLAN incorrecta 4475- Plantilla incorrecta 4476- Red incorrecta seleccionada 4477- Momento incorrecto 4478 4479### 2. Cambios No Rastreados 4480 4481- Nadie sabe quién cambió qué 4482- Sin lÃnea base 4483- Sin registro de auditorÃa 4484- Sin rollback 4485 4486### 3. Sin Recuperación Rápida 4487 4488Incluso si conoces el problema, restaurar requiere: 4489 4490- Capturas de pantalla 4491- Exportaciones 4492- Reconstrucciones manuales 4493- Horas de esfuerzo 4494 4495**Minutos de error â horas de inactividad.** 4496 4497## La Forma Más Segura de Operar Meraki 4498 4499Selent fue construido especÃficamente para proteger las operaciones de Meraki de este problema exacto. 4500 4501Con Selent obtienes: 4502 4503### Backups Automatizados 4504 4505Snapshots continuos y programados de: 4506 4507- Redes 4508- Dispositivos 4509- PolÃticas 4510- Plantillas 4511- Configuraciones a nivel de organización 4512 4513Siempre listos. Sin exportaciones manuales. 4514 4515### AuditorÃa de Cambios 4516 4517Sabe exactamente: 4518 4519- Qué cambió 4520- Quién lo cambió 4521- Cuándo cambió 4522- Cuál era el valor anterior 4523 4524Perfecto para troubleshooting y cumplimiento. 4525 4526### Restauración con Un Clic 4527 4528¿Rompiste algo? Revierte instantáneamente. 4529 4530No horas. **Segundos.** 4531 4532### Operaciones Más Seguras a Escala 4533 4534Aplica cambios con confianza en: 4535 4536- Cientos de tiendas 4537- Campus 4538- Sucursales distribuidas 4539- Clientes MSP 4540 4541Porque el rollback siempre está disponible. 4542 4543## Escenarios del Mundo Real que Protegemos 4544 4545**Cadena de retail** 4546El push de plantilla rompe la conectividad del POS â Restaura el último estado conocido bueno en segundos. 4547 4548**MSP gestionando 50+ clientes** 4549Un ingeniero aplica mal una regla de firewall â Rollback solo de esa red instantáneamente. 4550 4551**TI Empresarial** 4552Solicitud de auditorÃa de "¿quién cambió la polÃtica de seguridad?" â Historial completo de cambios disponible. 4553 4554**Equipos de cumplimiento** 4555Necesitan prueba de control de configuración â Logs automáticos + backups. 4556 4557## El Costo de Esperar 4558 4559La mayorÃa de los equipos piensan: *"Configuraremos los backups después."* 4560 4561Hasta el dÃa que: 4562 4563- Un ingeniero junior aplica la plantilla incorrecta 4564- Un cambio nocturno sale mal 4565- O un atacante modifica las configuraciones 4566 4567Y la recuperación toma horas. 4568 4569**Si cada hora de inactividad cuesta miles (o millones), ¿por qué arriesgarse?** 4570 4571Los backups y la restauración rápida no deberÃan ser opcionales. DeberÃan ser estándar. 4572 4573## Reflexión Final 4574 4575Tu red ahora es software. Y el software necesita control de versiones y rollback. Igual que el código. 4576 4577Si no desplegarÃas software en producción sin backups e historial de Git⦠4578 4579**¿Por qué hacerlo con tu red?** 4580 4581--- 4582 4583## Protege tu Meraki Antes del Próximo Error 4584 4585Selent te da: 4586 4587- Backup 4588- AuditorÃa 4589- Restauración 4590- Confianza 4591 4592Para que un pequeño cambio nunca se convierta en una gran interrupción. 4593 4594Conoce más o solicita un demo en [selent.ai](https://www.selent.ai) 4595 4596--- 4597 4598**#CiscoMeraki #BackupDeRed #GestiónDeConfiguración #RecuperaciónAnteDesastres #MSP #TIEmpresarial #SelentAI** 4599`},{slug:"year-networks-cannot-afford-to-fail",title:"2026: El Año en que las Redes Ya No Pueden Permitirse Fallar",excerpt:"La confiabilidad de la red es ahora un riesgo empresarial crÃtico. Más del 60% de las interrupciones son causadas por errores humanos, y la recuperación depende de tener backups adecuados. Descubre por qué 2026 debe ser el año de la automatización de recuperación de redes.",date:"2026-01-26",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Operaciones de Red",tags:["Confiabilidad de Red","Gestión de Configuración","Recuperación ante Desastres","Backup y Restauración","AIOps","Cumplimiento","Automatización de Redes"],coverImage:"/network-node-splitting.png",featured:!0,draft:!1,readTime:"4 min",content:` 4600Al comenzar 2026, una cosa está clara: **la confiabilidad de la red ya no es solo una preocupación de TI. Es un riesgo empresarial crÃtico.** 4601 4602Cada servicio digital, cada transacción, cada experiencia de usuario depen
4602de de una red que no solo esté disponible, sino que también esté correctamente configurada y sea recuperable. Y sin embargo, la mayorÃa de las interrupciones de red hoy en dÃa no son causadas por fallas de hardware o ciberataques. Son causadas por algo mucho más básico: 4603 4604**Errores de configuración y falta de backups adecuados.** 4605 4606Esta es la verdad incómoda que muchas organizaciones todavÃa subestiman. 4607 4608## El Tiempo de Inactividad Ya No Es una Excepción. Es un Patrón. 4609 4610Los estudios de la industria muestran consistentemente que: 4611 4612- **Más del 60% de los incidentes de red** están relacionados con errores humanos 4613- **Los errores de configuración** son la causa #1 de las interrupciones importantes 4614- **Los tiempos de recuperación** están directamente correlacionados con la existencia de un backup de configuración limpio 4615 4616Un solo error en VLAN, regla de firewall, polÃtica de enrutamiento o cambio de SSID puede: 4617 4618- Desconectar a miles de usuarios 4619- Detener sistemas de punto de venta 4620- Interrumpir el acceso remoto 4621- Violar requisitos de cumplimiento 4622- Causar daño reputacional y financiero en minutos 4623 4624Y cuando no existe un backup reciente y verificado, la recuperación se vuelve lenta, manual y riesgosa. 4625 4626**En ese momento, no estás restaurando. Estás reconstruyendo bajo presión.** 4627 4628## La Ilusión de Seguridad: "Podemos Reconfigurarlo" 4629 4630Muchos equipos todavÃa dependen de: 4631 4632- Exportaciones manuales 4633- Scripts ad-hoc 4634- Laptops de los ingenieros 4635- Memoria y conocimiento tribal 4636 4637Esto crea una falsa sensación de seguridad. 4638 4639En incidentes reales: 4640 4641- La persona que hizo el cambio puede no estar disponible 4642- La última configuración "conocida como buena" puede no existir 4643- La documentación frecuentemente está desactualizada 4644- Reconstruir desde cero introduce nuevos errores 4645 4646**Sin backups automatizados, versionados y restaurables, tu red está efectivamente sin seguro.** 4647 4648## Los Backups No Son Opcionales. Son Parte de la Disponibilidad. 4649 4650En 2026, disponibilidad significa más que tiempo de actividad. Significa: 4651 4652- La capacidad de **revertir instantáneamente** 4653- La capacidad de **comparar configuraciones semánticamente** 4654- La capacidad de **detectar cambios riesgosos** antes de que rompan producción 4655- La capacidad de **recuperarse sin pánico humano** 4656 4657**Una red sin backup no es resiliente. Es frágil.** 4658 4659## Riesgo de Cumplimiento y AuditorÃa 4660 4661Para industrias reguladas (finanzas, salud, retail, educación, gobierno), los backups de configuración no son solo protección operativa. También son: 4662 4663- Evidencia de control 4664- Prueba de seguimiento de cambios 4665- Un requisito para muchos frameworks de seguridad 4666 4667Sin estrategia de backup significa: 4668 4669- Sin postura real de cumplimiento 4670- Sin proceso de recuperación de incidentes defendible 4671- Sin registro de auditorÃa confiable 4672 4673## 2026 Debe Ser el Año de la Automatización de Recuperación de Redes 4674 4675Hacia aquà se dirige la industria: 4676 4677**No solo monitoreo. No solo alertas. Sino recuperación automatizada e inteligencia de configuración.** 4678 4679Las redes deben convertirse en: 4680 4681- **Auto-documentadas** 4682- **Versionadas** 4683- **Conscientes de diferencias** 4684- **Restaurables en segundos, no horas** 4685 4686Esta es la base para AIOps. Sin backups, la IA no tiene nada seguro sobre lo cual operar. 4687 4688## Por Qué Esto Importa para Selent 4689 4690En Selent, toda nuestra plataforma parte de un principio simple: 4691 4692> **No puedes automatizar lo que no puedes restaurar de forma segura.** 4693 4694Antes de que los agentes de IA puedan analizar, predecir y remediar, tu red debe estar: 4695 4696- Respaldada 4697- Versionada 4698- Rastreable 4699- Recuperable 4700 4701**Backup y Restauración Segura no es una funcionalidad. Es la capa base de la autonomÃa de red.** 4702 4703## 2026 Es el Botón de Reinicio 4704 4705Este año, los equipos de red tendrán que responder una pregunta honestamente: 4706 4707> *"Si toda nuestra red se desconfigura ahora mismo... ¿Qué tan rápido podemos volver?"* 4708 4709Si la respuesta no es: 4710 4711- **Minutos** 4712- **Automatizado** 4713- **DeterminÃstico** 4714 4715Entonces tu mayor riesgo no es el tiempo de inactividad. **Es la falsa confianza.** 4716 4717--- 4718 4719**Que 2026 sea el año en que las redes dejen de ser frágiles y comiencen a ser recuperables.** 4720 4721Conoce más en [www.selent.ai](https://www.selent.ai) 4722 4723--- 4724 4725**#ResilienciaDeRed #BackupYRestauracion #AutomatizacionDeRedes #AIOps #SelentAI #GestionDeConfiguracion #RecuperacionAnteDesastres** 4726`},{slug:"network-automation-mcp-essential-ai-enterprise",title:"Por Qué Automatización de Red + MCP Es Ahora Esencial para Operaciones Empresariales Impulsadas por IA",excerpt:"Descubre por qué la IA sola no soluciona la complejidad operacional â la automatización sÃ. Aprende cómo una Plataforma de Gestión y Control (MCP) permite a las empresas pasar de ap
4726agar incendios reactivamente a operaciones de red proactivas impulsadas por IA con automatización segura de ciclo cerrado.",date:"2025-12-08",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Operaciones de Red",tags:["Enterprise Networking","Network Automation","MCP","AIOps","AI Agents","Cisco","Configuration Management","Compliance"],coverImage:"/network-automation-mcp-ai-enterprise.png",featured:!0,draft:!1,readTime:"6 min",content:` 4727La red empresarial nunca ha sido más crÃtica â ni más compleja. El trabajo hÃbrido, la expansión de SaaS, operaciones multi-sucursal, dispositivos IoT y adopción de la nube han multiplicado las piezas móviles. Sin embargo, la mayorÃa de los equipos de TI aún se espera que soporten más usuarios, más dispositivos y SLAs más estrictos con aproximadamente el mismo personal. 4728 4729Esta es exactamente la razón por la que los analistas siguen enfatizando la necesidad de automatización y operaciones impulsadas por IA: 4730 4731- **El mercado de automatización de red** se espera que crezca más de 4à durante la próxima década a medida que las empresas cambian de operaciones manuales a modelos automatizados basados en intención 4732- **El mercado de plataformas AIOps** se proyecta que se duplique para 2030 a medida que las empresas dependen de la IA para filtrar telemetrÃa y automatizar respuesta a incidentes 4733- **El tiempo de inactividad sigue costando a las empresas** entre $5,600 y $9,000 por minuto, dependiendo de la industria, según Gartner y otras encuestas empresariales 4734 4735El mensaje es claro: la IA sola no soluciona la complejidad operacional â la automatización sÃ. Y la automatización solo es confiable cuando está impulsada por una Plataforma de Gestión y Control (MCP) fuerte y centralizada. 4736 4737## Por Qué la IA Sin Automatización Falla Dentro de la Empresa 4738 4739La mayorÃa de los equipos de TI empresariales ya tienen un montón de herramientas: 4740 4741- Plataformas de monitoreo 4742- AnalÃticas de endpoints y red 4743- Dashboards y alertas por todas partes 4744- Algunos scripts internos 4745 4746La IA a menudo se agrega como otra capa â detección de anomalÃas, alertas predictivas, troubleshooting basado en chat. ¿El problema? Si la red misma todavÃa se opera manualmente, la IA se vuelve consultiva en lugar de transformadora. 4747 4748Esto lleva a: 4749 4750- IA que detecta problemas sin forma segura de auto-corregirlos 4751- Alertas que predicen fallas pero sin enforcement automatizado de mejores prácticas 4752- Dashboards ricos en insights que aún requieren triaje manual y cambios manuales 4753 4754Las empresas rápidamente se dan cuenta de que el cuello de botella no es la visibilidad â es la capacidad de acción. La red necesita un plano de control consistente y programable antes de que la IA pueda cerrar el ciclo. 4755 4756## Qué Significa un MCP para la Empresa Moderna 4757 4758Una Plataforma de Gestión y Control no es otra herramienta de monitoreo; es la capa de automatización y gobernanza que conecta visibilidad con acción. 4759 4760### 1. Una Capa de Abstracción Unificada 4761 4762Diferentes sitios, diferentes modelos de dispositivos, diferentes configuraciones â pero TI necesita un modelo operativo único. 4763 4764Un MCP normaliza: 4765 4766- Configuraciones 4767- TelemetrÃa 4768- PolÃticas 4769- TopologÃa 4770 4771A través de vendors y tecnologÃas. 4772 4773### 2. Gobernanza de Red Basada en PolÃticas 4774 4775En lugar de hacer cambios manualmente dispositivo por dispositivo, las empresas definen intención: 4776 4777- "El WiFi de invitados debe estar aislado en todas las subsidiarias." 4778- "Todos los switches deben aplicar nuestra lÃnea base de seguridad estándar." 4779- "Ningún sitio debe derivar de la configuración aprobada." 4780 4781El MCP convierte esta intención en acciones automatizadas y aplicables. 4782 4783### 3. TelemetrÃa Limpia para IA 4784 4785La IA es tan buena como los datos que recibe. 4786 4787Un MCP proporciona: 4788 4789- Eventos correlacionados 4790- Diffs de configuración en vivo 4791- Consciencia de topologÃa 4792- LÃneas base históricas 4793 4794Esto permite a los agentes de IA razonar con contexto real, no ruido crudo. 4795 4796### 4. Ejecución Segura + Barreras de Protección 4797 4798La automatización debe ser segura: 4799 4800- Simulación de prueba en seco 4801- Control de radio de explosión 4802- Procedimientos de rollback 4803- Flujos de trabajo de aprobación 4804 4805Esto permite a las empresas adoptar automatización con confianza, sin miedo a interrupciones generalizadas. 4806 4807## Cómo MCP + IA Eleva las Operaciones Empresariales 4808 4809### 1. Monitoreo Más Inteligente y Contextual 4810 4811El monitoreo tradicional lanza alertas; la IA reduce ruido â pero con datos de backend de MCP, la IA se vuelve verdaderamente contextual: 4812 4813- ¿Qué cambió antes de un incidente? 4814- ¿Este problema es aislado o sistémico? 4815- ¿Es esto una deriva de configuración o una falla de hardware? 4816- ¿Cómo se ha comportado este sitio históricamente? 4817
4818Esto mueve a TI de apagar incendios reactivamente a estabilidad proactiva. 4819 4820### 2. Remediación Rápida y Controlada 4821 4822Con flujos de trabajo de automatización estandarizados, las empresas pueden: 4823 4824- Auto-resolver problemas de bajo riesgo 4825- Dar a los agentes de IA la capacidad de proponer cambios seguros 4826- Revertir configuraciones malas instantáneamente 4827- Aplicar lÃneas base a través de cientos o miles de dispositivos 4828 4829El resultado es MTTR más corto y rendimiento de red más predecible. 4830 4831### 3. Mejora Continua a Través de Insights de IA 4832 4833La IA puede analizar patrones a través de la empresa: 4834 4835- ¿Qué configuraciones correlacionan con menos incidentes? 4836- ¿Qué sitios están derivando más frecuentemente? 4837- ¿Qué mejoras se pueden estandarizar globalmente? 4838 4839Combinado con automatización, TI puede implementar mejoras recomendadas de forma confiable y segura. 4840 4841### 4. Resiliencia Proactiva a Nivel de Negocio 4842 4843El objetivo real es prevenir interrupciones mucho antes de que afecten las operaciones. 4844 4845Con MCP + IA, las empresas pueden: 4846 4847- Predecir saturación de enlaces antes de que los usuarios lo noten 4848- Detectar misconfiguraciones que aumentan el riesgo de seguridad 4849- Aplicar cumplimiento automáticamente 4850- Simular cambios de configuración antes del despliegue 4851 4852Esto fortalece la resiliencia operacional y reduce el costoso tiempo de inactividad. 4853 4854## Por Qué MCP Se Está Convirtiendo en Prioridad Estratégica para Empresas 4855 4856Las empresas que adoptan MCPs ganan: 4857 4858- **Seguridad y cumplimiento más fuertes** a través de lÃneas base aplicadas 4859- **Despliegue y replicación de sucursales/sitios más rápidos** 4860- **Ciclos de troubleshooting drásticamente más cortos** 4861- **Experiencia de usuario más estable** 4862- **Una plataforma donde la IA puede tomar acción real**, no solo dar consejos 4863 4864A medida que las redes se vuelven más distribuidas, el MCP se convierte en el "sistema nervioso digital" que une todo. 4865 4866## Cómo Selent MCP Va Más Allá del Enfoque Básico 4867 4868Selent MCP fue construido como una capa de automatización y orquestación de IA nativa y completamente integrada para redes centradas en Cisco, dando a los equipos de TI empresariales el poder de aplicar cumplimiento, automatizar de forma segura y actuar proactivamente a escala. 4869 4870A diferencia de las herramientas de monitoreo tradicionales, Selent MCP normaliza telemetrÃa, configuraciones y polÃticas para que los agentes de IA puedan razonar y ejecutar con contexto real. Con automatización de ciclo cerrado, integración profunda con Cisco y una arquitectura dinámica diseñada para agentes de IA especializados, Selent mueve a las empresas de gestión de red reactiva a un modelo operacional resiliente y de auto-mejora. 4871 4872**¿Listo para transformar tus operaciones de red con automatización impulsada por IA?** 4873 4874**Comienza tu prueba gratuita de 14 dÃas hoy en [selent.ai](https://www.selent.ai) â sin tarjeta de crédito requerida.** 4875 4876--- 4877 4878**#EnterpriseNetworking #NetworkAutomation #MCP #AIOps #SelentAI #CiscoNetworking #ITOperations** 4879`},{slug:"network-resilience-msp-survival-metric",title:"Resiliencia de Red: Por Qué Ahora Es una Métrica de Supervivencia para MSPs",excerpt:"Descubre por qué la resiliencia de red se ha convert
4879ido en un KPI central para MSPs, estrategias prácticas de baja fricción para mantener las redes funcionando, y cómo herramientas de automatización como Selent MCP están ayudando a los MSPs a escalar sin quemar a sus equipos.",date:"2025-11-26",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Operaciones de Red",tags:["MSP","Network Resilience","Cisco Meraki","Automation","Configuration Management","Compliance","AIOps"],coverImage:"/network-resilience-msp.png",featured:!0,draft:!1,readTime:"9 min",content:` 4880La resiliencia de red ya no es un "nice to have" para Proveedores de Servicios Gestionados â es el negocio. Cuando las redes están caÃdas, tus clientes pierden ingresos, tu helpdesk se satura, y tus SLAs empiezan a correr como una bomba de tiempo. 4881 4882Este post explora por qué la resiliencia deberÃa ser un KPI central para MSPs, formas prácticas de baja fricción para mantener las redes funcionando, y cómo la automatización se está convirtiendo silenciosamente en la diferencia entre "estamos sobreviviendo" y "estamos escalando." 4883 4884## Por Qué la Resiliencia de Red Es Ahora una Métrica de Supervivencia para MSPs 4885 4886El tiempo de inactividad siempre ha sido costoso, pero los números siguen empeorando: 4887 4888- **La estimación ampliamente citada de Gartner** pone el costo promedio del tiempo de inactividad de TI en aproximadamente $5,600 por minuto para organizaciones más grandes â más de $300K por hora 4889- **Incluso para negocios más pequeños**, los estudios muestran que el tiempo de inactividad aún cuesta cientos de dólares por minuto, tÃpicamente en el rango de $137â$427 por minuto 4890 4891Para MSPs, ese costo no está solo del lado del cliente. Cada interrupción también impacta: 4892 4893- Tu equipo de soporte (más tickets, más escalaciones) 4894- Tus márgenes (trabajo no planificado, horas extra) 4895- Tu reputación y tasas de renovación 4896 4897Al mismo tiempo, los entornos modernos son mucho más complejos que un solo router y un par de switches. Trabajo hÃbrido, SaaS, SD-WAN, Wi-Fi en todas partes, IoT⦠cada nuevo proyecto agrega otra pieza móvil que se espera que el MSP mantenga "siempre encendida." 4898 4899No sorprende que en encuestas recientes de profesionales de TI y MSP: 4900 4901- **60% de los MSPs** reportan burnout de moderado a alto 4902- **La proliferación de herramientas y falta de visibilidad en tiempo real** se citan como principales puntos de dolor operacional 4903 4904La resiliencia no se trata solo de redundancia de hardware. Se trata de diseñar operaciones para lidiar con errores, cambios y sorpresas â y hacerlo a escala. 4905 4906## Error Humano: Aún el Enemigo #1 del Uptime 4907 4908A pesar de toda la inversión en infraestructura, las personas y los procesos siguen siendo el eslabón más débil: 4909 4910- **El análisis de interrupciones del Uptime Institute** muestra que el 66â80% de los incidentes de tiempo de inactividad involucran error humano de alguna forma 4911- En un reporte más reciente, **casi el 40% de las organizaciones** dicen que han sufrido una interrupción mayor causada por error humano solo en los últimos tres años 4912- **Los problemas relacionados con la red** ahora son responsables de aproximadamente el 30% de las interrupciones de servicio de TI de extremo a extremo en data centers 4913 4914Para MSPs, eso usualmente se ve como: 4915 4916- Un cambio de configuración apresurado un viernes por la tarde 4917- Un sitio clonado que arrastró una configuración vieja de VLAN, ACL o SSID 4918- Un respaldo faltante o desactualizado cuando falla un dispositivo 4919- Cambios "pequeños" hechos directamente en un dashboard sin ningún registro o plan de rollback 4920 4921Esto es exactamente donde la automatización y estandarización pueden convertir la resiliencia de pensamiento deseable a práctica repetible. 4922 4923## Formas Simples y de Alto Impacto en que los MSPs Pueden Mejorar la Resiliencia de Red 4924 4925No necesitas un programa de transformación gigante para mover la aguja. Aquà hay patrones prácticos de "victoria fácil" que los MSPs pueden aplicar en entornos Cisco Meraki y similares. 4926 4927### 1. Estandariza Configuraciones con Plantillas Doradas 4928 4929Crea plantillas doradas para topologÃas comunes: sucursales, tiendas retail, clÃnicas, almacenes, etc. 4930 4931- Define VLANs estándar, SSIDs, reglas de firewall, QoS, lÃneas base de seguridad 4932- AplÃcalas usando plantillas o clonación de red, en lugar de "hacer clic" por sitio 4933- Versiona estas plantillas, y trata los cambios como código (revisar, aprobar, luego desplegar) 4934 4935Esto reduce la deriva y hace mucho menos probable que un sitio tenga una configuración "especial" que nadie recuerda hasta que se rompe. 4936 4937### 2. Automatiza Respaldos de Configuración y Versionado 4938 4939Suena básico, pero muchas redes aún no tienen respaldos de configuración completos y automatizados en todos los dispositivos. 4940 4941Para resiliencia, los MSPs deberÃan: 4942 4943- Tomar respaldos programados de cada configuración (switches, firewalls, APs, MX, etc.) 4944- Almacenar versiones con timestamps claros y metadatos de cambios 4945- Hacer que los flujos de trabajo de restauración sean de "un clic" (o cercano) para cuando algo sale mal 4946
4947La clave es no depender de heroÃsmos durante una interrupción: el camino de restauración deberÃa ser obvio, probado y rápido. 4948 4949### 3. Usa Ventanas de Cambio Seguras y Verificaciones Pre-Cambio 4950 4951No todos los cambios son iguales, pero algunas salvaguardas ayudan mucho: 4952 4953- Define ventanas de cambio estándar para actualizaciones de mayor riesgo (ej., reglas de firewall, routing core) 4954- Ejecuta verificaciones pre-cambio: alcanzabilidad, estado de redundancia, linting básico de configuración (ej., subredes duplicadas, reglas conflictivas) 4955- Ten un plan de rollback documentado para cada cambio de riesgo medio/alto 4956 4957Asà es como reduces activamente el número de incidentes inducidos por error humano (la mayorÃa del tiempo de inactividad). 4958 4959### 4. Clona Redes de Forma Inteligente 4960 4961Las plataformas gestionadas en la nube como Cisco Meraki facilitan levantar nuevos sitios vÃa clonación y plantillas â lo cual es una gran victoria para MSPs gestionando cientos de sitios. Los propios datos de Meraki muestran más de 190M de dispositivos conectados en más de 4M de redes activas globalmente, todo gestionado desde la nube. 4962 4963Para hacer la clonación resiliente: 4964 4965- Extrae parámetros especÃficos de ubicación (rangos IP, tags, SSIDs, VLANs) en variables 4966- Usa scripts o automatizaciones para poblar esas variables de forma segura 4967- Valida nuevos despliegues contra una checklist antes del handover 4968 4969### 5. Monitorea SÃntomas, No Solo "Arriba/Abajo" 4970 4971Las verificaciones de ping no son suficientes. Señales simples de alto valor incluyen: 4972 4973- Utilización y umbrales de latencia WAN por sitio 4974- Conteos de clientes AP y tasas de error 4975- Cambios de estado de puertos de switch en uplinks crÃticos 4976- Cambios repentinos en configuración (vs. lÃnea base anterior) 4977 4978El truco no es "más alertas" â son menos alertas, mejores, vinculadas a runbooks claros para que tu NOC sepa exactamente qué hacer. 4979 4980### 6. Prueba la Recuperación Como Pruebas los Respaldos 4981 4982Todo MSP dice, "tenemos respaldos." Muchos menos pueden decir, "probamos restauraciones regularmente." 4983 4984Hazlo parte de las operaciones: 4985 4986- Elige un sitio o tipo de dispositivo regularmente 4987- Realiza una restauración de configuración controlada desde respaldo en un lab o entorno no crÃtico 4988- Ajusta runbooks basándote en lo que fue lento, doloroso o poco claro 4989 4990Esto construye músculo real de resiliencia y da confianza a tu equipo cuando algo serio se rompe. 4991 4992## Por Qué Esto Importa EspecÃficamente para MSPs 4993 4994Los MSPs están en la intersección de riesgo y confianza: 4995 4996- **Los clientes esperan que "mantengas las cosas funcionando"** â a menudo sin entender completamente la complejidad involucrada 4997- **Los SLAs y contratos** cada vez más referencian expectativas de disponibilidad, tiempo de recuperación y seguridad 4998- **Nuevas regulaciones y frameworks** (ISO, SOC 2, PCI DSS, HIPAA, etc.) incorporan resiliencia, control de cambios y auditabilidad en lo que "bueno" significa 4999 5000Las encuestas de la industria muestran que los MSPs están respondiendo expandiendo sus ofertas; un reporte de 2024 encontró que **97% de los MSPs planean agregar nuevos servicios**, con un fuerte enfoque en ofertas relacionadas con seguridad y resiliencia. 5001 5002Pero agregar servicios sin simplificar operaciones puede empeorar las cosas: más herramientas, más dashboards, más formas de cometer errores. La automatización y una mentalidad de plataforma son cómo los MSPs crecen ingresos sin quemar a sus equipos. 5003 5004## Cómo Selent MCP y las Herramientas de Automatización Ayudan a los MSPs a Construir Resiliencia por Defecto 5005 5006Este es exactamente el espacio de problemas donde Selent está enfocado â especialmente para MSPs ejecutando grandes implementaciones de Cisco Meraki. 5007 5008Algunas formas en que los MSPs están usando Selent MCP y módulos de automatización hoy para mejorar la resiliencia: 5009 5010### Respaldo y Restauración Automatizado a Través de Organizaciones 5011
5012- Respaldos continuos basados en polÃticas de configuraciones de Meraki a través de todas las redes y dispositivos 5013- Historial de versiones centralizado para que puedas ver rápidamente qué cambió, dónde y cuándo 5014- Flujos de trabajo de restauración guiados para revertir misconfiguraciones en minutos, no horas 5015 5016### Despliegues Más Seguros y Repetibles 5017 5018- Clonación de red y despliegue masivo de puertos de switch automatizado vÃa API en lugar de clics manuales 5019- Plantillas estandarizadas aplicadas consistentemente a través de docenas o cientos de sitios 5020- Reducción de la posibilidad de errores "únicos" que luego causan interrupciones 5021 5022### Verificaciones de Configuración y Cumplimiento Antes de que las Cosas se Rompan 5023 5024- Verificaciones automatizadas de configuraciones riesgosas o no estándar 5025- Detección temprana de deriva de tus plantillas doradas o lÃneas base de polÃticas 5026- Soporte para vistas orientadas a cumplimiento (ej., segmentación, logging, configuraciones de seguridad) para alinearse con frameworks que importan a tus clientes 5027 5028### "Co-Piloto" Operacional para Ingenieros de MSP 5029 5030- Selent MCP expone la superficie de API de Meraki a través de flujos de trabajo amigables con automatización y agentes de IA 5031- Tu equipo pasa menos tiempo buscando datos a través de dashboards y más tiempo actuando sobre insights 5032- Con el tiempo, esto reduce la proliferación de herramientas y te da una capa operacional más unificada para redes Meraki 5033 5034**El resultado neto:** menos interrupciones, recuperaciones más rápidas y mayores márgenes por dispositivo bajo gestión. 5035 5036## Comenzando con Resiliencia de Red 5037 5038Si eres un MSP gestionando redes Cisco Meraki y quieres: 5039 5040- Reducir el riesgo de tiempo de inactividad 5041- Estandarizar operaciones a través de muchos clientes y sitios 5042- Dar a tu equipo superpoderes de automatización sin escribir una plataforma interna completa 5043 5044Entonces la resiliencia de red es el lugar perfecto para empezar â y Selent MCP está diseña
5044do para hacer ese viaje mucho más fácil. 5045 5046**Comienza tu prueba gratuita de 14 dÃas hoy en [selent.ai](https://www.selent.ai) â sin tarjeta de crédito requerida.** 5047 5048--- 5049 5050**#MSP #NetworkResilience #CiscoMeraki #NetworkAutomation #AIOps #SelentAI #ITOperations** 5051`},{slug:"hidden-cost-misconfigurations-cisco-meraki",title:"El Costo Oculto de las Misconfiguraciones en Redes Cisco Meraki â y Cómo Selent las Previene",excerpt:"Descubre cómo las misconfiguraciones de red causan el 80% de las interrupciones no planificadas y cuestan miles por minuto â y cómo la plataforma de automatización impulsada por IA de Selent protege tu entorno Cisco Meraki con respaldos automatizados, detección de deriva y capacidades de restauración con un clic.",date:"2025-11-17",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Operaciones de Red",tags:["Cisco Meraki","Network Security","Configuration Management","AI Automation","Compliance","MSP"],coverImage:"/network-node-splitting.png",featured:!0,draft:!1,readTime:"5 min",content:` 5052En operaciones de red, el error más pequeño puede tener el mayor impacto. Para administradores de Cisco Meraki que gestionan múltiples sitios o clientes, las misconfiguraciones son una de las fuentes más comunes â y más costosas â de tiempo de inactividad, pérdida de datos y riesgo de cumplimiento. 5053 5054## Por Qué Ocurren las Misconfiguraciones 5055 5056La arquitectura gestionada en la nube de Cisco Meraki hace increÃblemente fácil desplegar, modificar y replicar configuraciones a través de dispositivos y redes. Esa misma simplicidad, sin embargo, es lo que hace a las organizaciones vulnerables al error humano. 5057 5058Escenarios comunes incluyen: 5059 5060- Un cambio de VLAN en un sitio que accidentalmente se propaga a otros 5061- Una regla de firewall eliminada durante mantenimiento, rompiendo acceso remoto 5062- Una actualización de plantilla que sobrescribe configuraciones locales 5063- Una modificación de SSID que desconecta clientes wireless en producción 5064 5065En un despliegue de una sola organización, estos errores son disruptivos. A través de docenas o cientos de redes, pueden volverse catastróficos â afectando miles de usuarios, experiencias de cliente y postura de seguridad. 5066 5067## El Costo Real de una Misconfiguración 5068 5069Cuando los equipos de red piensan en "tiempo de inactividad", a menudo imaginan falla de hardware o cortes de ISP. Pero estadÃsticamente, los errores de configuración causan más incidentes que cualquier otro factor. 5070 5071Los benchmarks de la industria estiman que: 5072 5073- **80% de las interrupciones no planificadas** son causadas por misconfiguraciones 5074- **El costo promedio de tiempo de inactividad de red** excede $5,600 por minuto para entornos empresariales 5075- **Los incidentes relacionados con cumplimiento** (PCI, ISO, HIPAA) a menudo provienen de polÃticas inconsistentes de firewall o SSID 5076 5077Para proveedores de servicios gestionados (MSPs) y partners de TI, una sola misconfiguración también puede significar: 5078 5079- Penalidades contractuales por violaciones de SLA 5080- Pérdida de confianza del cliente 5081- Horas de rollback manual â si es que existen respaldos 5082 5083En resumen: lo que parece un pequeño error puede costar miles de dólares y daño reputacional. 5084 5085## La Brecha de Visibilidad en Operaciones Meraki 5086 5087Mientras Cisco Meraki proporciona excelente visibilidad y monitoreo a través de su Dashboard y APIs, aún existe una brecha crÃtica: **no ofrece nativamente respaldo completo de configuración, detección de deriva o restauración automatizada a través de organizaciones.** 5088 5089Para redes grandes o MSPs gestionando múltiples tenants, esto significa: 5090 5091- No hay forma fácil de comparar configuraciones entre redes 5092- No hay rastro de auditorÃa de qué cambió y cuándo 5093- No hay rollback con un clic si algo sale mal 5094 5095Ahà es donde entra Selent. 5096 5097## Cómo Selent Previene y Corrige Misconfiguraciones 5098 5099Selent es una plataforma de automatización impulsada por IA construida especÃficamente para entornos Cisco Meraki. Protege continuamente tu red de riesgos de configuración a través de cuatro capacidades centrales: 5100 5101### 1. Respaldos Automatizados 5102 5103Selent captura y versiona automáticamente cada configuración de dispositivo y red de Meraki. Siempre tienes una copia segura y encriptada desde la cual restaurar â sin exportación manual ni scripting. 5104 5105### 2. Detección de Deriva Impulsada por IA 5106 5107Nuestros Agentes Selent especializados analizan cambios de configuración a través del tiempo y organizaciones, identificando anomalÃas o derivas de la lÃnea base deseada. La plataforma usa análisis de diff semántico para señalar lo que realmente importa â no solo cambios lÃnea por lÃnea. 5108 5109### 3. Restauración con Un Clic 5110 5111Cuando surgen problemas, puedes revertir instantáneamente a una configuración conocida y funcional. No más recrear configuraciones complejas manualmente â solo elige una instantánea de respaldo y restaura en segundos. 5112 5113### 4. Cumplimiento y Reportes 5114 5115Selent proporciona reportes listos para auditorÃa mostrando quién camb
5115ió qué, cuándo y cómo afectó las polÃticas de cumplimiento. Ya sea que necesites alineación con PCI, ISO o gobernanza interna, la visibilidad es automática. 5116 5117## El Resultado: Resiliencia Operacional 5118 5119Con Selent en su lugar, los equipos de operaciones de red y MSPs pueden: 5120 5121- Detectar cambios de configuración riesgosos antes de que causen interrupciones 5122- Reducir el retrabajo manual y tiempo de troubleshooting hasta en un 70% 5123- Asegurar cumplimiento y seguridad consistente a través de todos los entornos Meraki 5124- Entregar una mejor experiencia, más confiable, a los usuarios finales 5125 5126Selent convierte lo que solÃa ser apagar incendios reactivamente en protección proactiva. 5127 5128## Preparándose para Cisco Catalyst 5129 5130Mientras la plataforma de Selent está actualmente optimizada para Cisco Meraki, estamos extendiendo activamente nuestros Agentes de IA y Servidor MCP para soportar el ecosistema Cisco Catalyst. Este enfoque unificado permitirá a los equipos de TI gestionar tanto dispositivos Cisco gestionados en la nube como on-premise bajo un único framework de automatización inteligente. 5131 5132## Conclusión 5133 5134Las misconfiguraciones de red no van a desaparecer â pero su impacto puede eliminarse. Con la automatización correcta y visibilidad impulsada por IA, puedes detener errores costosos antes de que se propaguen y recuperarte de incidentes en minutos, no horas. 5135 5136Selent te empodera para hacer exactamente eso: **operaciones de red resilientes, cumplientes e inteligentes construidas para la era de Cisco Meraki.** 5137 5138Aprende más en [www.selent.ai](https://www.selent.ai) 5139 5140--- 5141 5142**#CiscoMeraki #NetworkAutomation #AIOps #SelentAI #NetworkResilience #CiscoNetworking** 5143`},{slug:"elevating-managed-services-with-ai",title:"Elevando los Servicios Gestionados con IA: Cómo Selent Transforma las Operaciones de Red Cisco",excerpt:"Descubre cómo la plataforma de automatización impulsada por IA de Selent transforma las operaciones de Proveedores de Servicios Gestionados con gestión inteligente de configuración, automatización de cumplimiento y operaciones de red autónomas para entornos Cisco Meraki y Catalyst.",date:"2025-11-04",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Producto",tags:["MSP","AI","Network Automation","Cisco Meraki","Cisco Catalyst","Compliance","MCP"],coverImage:"/elevating-managed-services-with-ai.png",featured:!0,draft:!1,readTime:"4 min",content:` 5144Para los Proveedores de Servicios Gestionados (MSPs), la eficiencia, visibilidad y automatización ya no son opcionales â son la base de operaciones escalables y rentables. Sin embargo, muchos MSPs que gestionan redes Cisco aún luchan con tareas de configuración manuales, brechas de cumplimiento y opciones de recuperación limitadas en los entornos de sus clientes. 5145 5146Ahà es donde Selent marca la diferencia. Diseñado especÃficamente para Redes Cisco, Selent es una plataforma de automatización impulsada por IA que redefine cómo los MSPs operan, protegen y escalan sus despliegues de Meraki â y pronto, entornos Cisco Catalyst (actualmente en desarrollo). 5147 5148## De Operaciones de Red Manuales a Impulsadas por IA 5149 5150Los ingenieros de red pasan hasta el 70% de su tiempo en tareas de configuración repetitivas, dejando poco ancho de banda para trabajo estratégico. Selent elimina esa fricción a través de automatización inteligente, permitiendo a los MSPs: 5151 5152- Automatizar respaldos de configuración cada seis horas 5153- Restaurar instantáneamente cualquier dispositivo desde una instantánea segura 5154- Entender cambios de configuración en español simple 5155- Buscar toda la red usando lenguaje natural 5156- Auditar cumplimiento continuamente 5157 5158El resultado: recuperación de incidentes más rápida, cero deriva de configuración y un rastro de auditorÃa completo en todas las organizaciones gestionadas. 5159 5160## Agentes Especializados: Convirtiendo Automatización en Inteligencia 5161 5162Los Agentes Especializados de Selent van más allá de la automatización â traen verdadera inteligencia a las operaciones gestionadas. Diseñados para MSPs, estos agentes ayudan a asegurar rendimiento, cumplimiento y resiliencia a través de múltiples redes de clientes: 5163 5164**Agente de Cumplimiento** â Verifica automáticamente configuraciones contra estándares de la industria como HIPAA, PCI-DSS e ISO 27001. 5165
5166**Agente de Salud de Red** â Monitorea el rendimiento de la red, detectando anomalÃas antes de que afecten a los usuarios finales. 5167 5168**Agente de Monitoreo** â Rastrea eventos crÃticos y proporciona insights basados en IA para gestión proactiva. 5169 5170Con estos agentes, los MSPs pueden reducir la carga operativa, mejorar SLAs y entregar un estándar más alto de servicio sin expandir sus equipos de soporte. 5171 5172## Selent MCP: El Puente de IA para Redes Cisco 5173 5174En el corazón de la innovación de Selent está Selent MCP (Model Context Protocol) â un framework abierto que conecta las operaciones de red Cisco con modelos de IA modernos como Claude o ChatGPT. 5175 5176Con MCP, los MSPs pueden desarrollar agentes de IA personalizados que entienden y actúan sobre sus datos de red â desde generar reportes de cumplimiento hasta automatizar flujos de trabajo de remediación. MCP convierte el Centro de Operaciones de Red (NOC) en un hub de control aumentado por IA, capaz de aprender, razonar y responder en tiempo real. 5177 5178## Expandiendo a Cisco Catalyst (En Progreso) 5179 5180Mientras Selent ya está transformando las operaciones de Cisco Meraki, la próxima evolución está en camino: soporte nativo para Cisco Catalyst. Esta integración próxima unificará automatización, cumplimiento e insights impulsados por IA a través del ecosistema más amplio de Redes Cisco, permitiendo a los MSPs gestionar infraestructuras hÃbridas desde una única plataforma inteligente. 5181 5182## Por Qué los MSPs Eligen Selent 5183 5184Selent fue construido con los MSPs en mente â ofreciendo las herramientas, automatización e inteligencia necesarias para escalar eficientemente: 5185 5186- 70% de recuperación de incidentes más rápida 5187- Cero pérdida de configuración 5188- Reportes de cumplimiento instantáneos 5189- SLA de 99.9% de uptime 5190- Visibilidad y control multi-organización 5191 5192Ya sea gestionando diez o mil clientes, Selent empodera a los MSPs para operar con precisión, velocidad y confianza. 5193 5194## El Futuro de las Operaciones de Red Cisco Es Autónomo 5195 5196La era de la gestión manual de redes está terminando. A medida que la automatización se encuentra con la inteligencia, los MSPs que adoptan la plataforma impulsada por IA de Selent â y su framework abierto Selent MCP â están liderando el cambio hacia operaciones autónomas y resilientes. 5197 5198Y con el soporte de Cisco Catalyst en progreso, Selent está listo para unificar la experiencia completa de Redes Cisco bajo un mismo techo poderoso e impulsado por IA. 5199 5200**Comienza tu prueba gratuita de 14 dÃas hoy en selent.ai â sin tarjeta de crédito requerida.** 5201 5202Selent: Más Inteligente. Más Seguro. Automatizado. 5203`},{slug:"selent-mcp-semantic-search-multi-key",title:"Actualización de Selent MCP: Descubrimiento de API con IA y Gestión Multi-Cliente",excerpt:"Conoce la última actualización de Selent MCP con búsqueda semántica para descubrimiento de API y capacidades de gestión multi-cliente para MSPs. Descubre cómo la búsqueda semántica basada en vectores y el soporte inteligente multi-clave mejoran los flujos de trabajo de operaciones de red.",date:"2025-10-30",author:"Fabian Levinsky",authorImage:"/fabian.jpeg",authorTitle:"Head of Engineering",authorBio:"Fabian is the Head of Engineering at Selent, leading backend systems, AI engineering, and frontend development. With deep expertise in distributed systems and intelligent automation, he architects the core technology that powers Selent's network operations platform.",category:"Técnico",tags:["MCP","AI","Network Automation","Cisco Meraki","MSP","SemanticSearch","VectorDatabase","Qdrant"],coverImage:"/mcp-update-blog.png",featured:!0,draft:!1,readTime:"14 min",content:` 5204Nos complace anunciar una actualización importante del servidor Model Context Protocol (MCP) de Selent que mejora la forma en que los equipos de red interactúan con la API del Dashboard de Cisco Meraki. Esta actualización introduce dos nuevas capacidades: **búsqueda semántica impulsada por IA para el descubrimiento de endpoints de API** y **soporte inteligente multi-clave para gestionar múltiples organizaciones de clientes**. 5205 5206Para Proveedores de Servicios Gestionados y equipos de operaciones de red que gestionan múltiples despliegues de Meraki, estas caracterÃsticas ofrecen mejoras prácticas a los flujos de trabajo diarios. En lugar de memorizar nombres de endpoints de API o gestionar instancias de integración separadas para cada cliente, los equipos ahora pueden usar consultas en lenguaje natural y cambio de contexto multi-organización sin interrupciones, todo a través de una única instancia del servidor MCP. 5207 5208Este análisis técnico profundo explora cómo funcionan estas caracterÃsticas, la arquitectura que las impulsa y los beneficios prácticos para tu flujo de trabajo de operaciones de red. 5209 5210## El DesafÃo: Encontrar el Endpoint de API Correcto 5211 5212La API del Dashboard de Cisco Meraki es completa, ofreciendo más de 816 endpoints en organizaciones, redes, dispositivos, wireless, switching, appli
5212ances de seguridad, cámaras y sensores. Esta amplitud es poderosa pero crea un desafÃo de descubrimiento: ¿cómo encuentras rápidamente el endpoint correcto cuando necesitas realizar una operación de red especÃfica? 5213 5214Los enfoques tradicionales dependÃan de la coincidencia de patrones basada en palabras clave, requiriendo que los usuarios conocieran la terminologÃa exacta y a menudo devolviendo resultados irrelevantes. Si buscabas "estado del dispositivo", podrÃas obtener endpoints para estado de uplink del dispositivo, información de dispositivo cliente o estado de gateway celular, sin indicación clara de cuál era más relevante para tu intención. 5215 5216Para equipos que gestionan múltiples organizaciones de clientes, el desafÃo se agravaba por la necesidad de configurar y gestionar claves API separadas, mantener mapeos de organización a clave manualmente y arriesgarse a llamar endpoints con el contexto de clave API incorrecto. 5217 5218## Búsqueda Semántica: Descubrimiento de API en Lenguaje Natural 5219 5220La última actualización de Selent MCP reemplaza la coincidencia de palabras clave con **búsqueda semántica basada en vectores**. Este enfoque impulsado por IA entiende el *significado* detrás de tus consultas, no solo las palabras clave. 5221 5222### Cómo Funciona 5223 5224Bajo el capó, Selent MCP ahora aprovecha: 5225 5226- **Qdrant**: Una base de datos vectorial de alto rendimiento que se ejecuta localmente dentro del servidor MCP 5227- **FastEmbed**: Un modelo de embedding eficiente (BAAI/bge-small-en-v1.5) que convierte texto en vectores semánticos 5228- **Puntuación Inteligente**: Un algoritmo de relevancia multi-factor que combina similitud vectorial con potenciación contextual 5229 5230Cuando el servidor MCP arranca, genera automáticamente embeddings para los 816 endpoints de la API de Meraki, capturando tanto el nombre del método como la descripción en un espacio vectorial buscable. Cuando envÃas una consulta, el sistema: 5231 52321. Convierte tu consulta en lenguaje natural en una representación vectorial 52332. Realiza búsqueda de similitud contra todos los endpoints indexados 52343. Aplica potenciación inteligente para coincidencias exactas, presencia de términos y simplicidad del método 52354. Devuelve resultados clasificados con puntuaciones de confianza 5236 5237### Antes y Después 5238 5239**Antes (Coincidencia de Palabras Clave)**: 5240\`\`\` 5241Consulta: "obtener estado del dispositivo" 5242Resultados: Intentos de coincidencia de patrones, posibles falsos positivos 5243Relevancia: ~30% de tasa de precisión 5244\`\`\` 5245 5246**Después (Búsqueda Semántica)**: 5247\`\`\` 5248Consulta: "obtener estado del dispositivo" 5249Resultados: 5250 1. devices.getDevice (puntuación: 0.87) - "Devolver un solo dispositivo" 5251 2. devices.getDeviceUplink (puntuación: 0.74) - "Devolver info de uplink del dispositivo" 5252 3. devices.getOrganizationDevicesStatuses (puntuación: 0.71) - "Listar estado de todos los dispositivos" 5253Relevancia: ~95% de tasa de precisión 5254\`\`\` 5255 5256El enfoque semántico entiende que "estado" se relaciona con endpoints de información del dispositivo, y los clasifica inteligentemente por relevancia a tu consulta especÃfica. 5257 5258### Consultas en Lenguaje Natural 5259 5260El sistema maneja varios patrones de lenguaje natural: 5261 5262- **Consultas directas**: "obtener organizaciones", "listar redes", "mostrar info del dispositivo" 5263- **Consultas basadas en tareas**: "verificar configuración de puerto", "ver reglas de firewall", "monitorear conexiones de clientes" 5264- **Consultas contextuales**: "configuración de puerto del dispositivo Q2XX-XXXX-XXXX", "polÃticas de seguridad de red" 5265 5266Cada consulta devuelve no solo nombres de endpoints, sino la sección (ej., \`switch\`, \`appliance\`, \`networks\`), nombre del método (ej., \`getDeviceSwitchPort\`), una descripción y requisitos de parámetrosâtodo lo que necesitas para entender si es el endpoint correcto para tu tarea. 5267 5268### Beneficios Técnicos 5269 52701. **Cobertura Completa**: Los 816 endpoints se indexan automáticamenteâno se requieren definiciones manuales de patrones 52712. **Libre de Mantenimiento**: A medida que Meraki agrega nuevos endpoints de API, el script de regeneración de colección los descubre automáticamente 52723. **Rendimiento Rápido**: La búsqueda vectorial se completa en <50ms para consultas tÃpicas 52734. **Ejecución Local**: El modelo de embedding (33M parámetros) se ejecuta localmente con mÃnima sobrecarga 52745. **Bajo Almacenamiento**: La colección indexada completa es de solo 2-5 MB 5275 5276## Soporte Multi-Clave: Gestionando Múltiples Organizaciones de Clientes 5277 5278Para Proveedores de Servicios Gestionados, un desafÃo operacional común es gestionar la infraestructura de red a través de múltiples organizaciones de clientes, cada una con su propia clave API del Dashboard de Meraki. Anteriormente, esto requerÃa ejecutar instancias separadas del servidor MCP o cambiar contextos manualmenteâambos propensos a errores e ineficientes. 5279 5280La nueva función de soporte multi-clave aborda este desafÃo de flujo de trabajo al permitir que un **único servidor MCP gestione múltiples claves API** y resuelva automáticamente qué clave usar basándose en el contexto organizacional. 5281 5282### Configuración 5283 5284Configurar el modo multi-clave es sencillo. En lugar de proporcionar una única clave API, proporcionas una lista separada por comas: 5285 5286**Configuración Simple** (claves sin nombre): 5287\`\`\`bash 5288MERAKI_API_KEY="clave1,clave2,clave3" 5289\`\`\` 5290 5291**Configuración Etiquetada** (recomendada para MSPs): 5292\`\`\`bash 5293MERAKI_API_KEY="cliente_a:abc123...,cliente_b:def456...,cliente_c:ghi789..." 5294\`\`\` 5295 5296El formato etiquetado te permite asignar nombres amigables a cada clave, facilitando identificar qué clave corresponde a qué cliente en logs y herramientas de gestión. 5297 5298### Resolución Inteligente de Claves 5299 5300Cuando ejecutas una llamada API que requiere contexto de organización, el sistema determina automáticamente qué clave API usar a través de un algoritmo de resolución basad
5300o en prioridad: 5301 53021. **ID de Clave ExplÃcito**: Si especificas un parámetro \`key_id\`, se usa esa clave 53032. **Mapeo de Organización**: Si proporcionas un \`organizationId\`, el sistema busca qué clave tiene acceso a esa organización 53043. **Defecto de Sesión**: Si has establecido una clave por defecto para la sesión actual, se usa 53054. **Primera Clave Configurada**: Recurre a la primera clave en tu configuración 5306 5307Esta resolución inteligente significa que puedes escribir consultas naturales como: 5308 5309\`\`\` 5310"Muéstrame todas las redes en la organización 123456" 5311\`\`\` 5312 5313El sistema determina automáticamente que la organización 123456 pertenece a la clave API de cliente_b y enruta la solicitud en consecuenciaâsin selección manual de clave requerida. 5314 5315### Descubrimiento de Organizaciones 5316 5317Para habilitar el mapeo automático de organización a clave, Selent MCP proporciona un proceso de descubrimiento único: 5318 5319\`\`\`python 5320discover_all_organizations() 5321\`\`\` 5322 5323Esta herramienta itera a través de todas las claves API configuradas, obtiene las organizaciones accesibles para cada una y construye una caché interna. Una vez completado el descubrimiento, las llamadas API subsiguientes pueden resolver automáticamente la clave correcta basándose solo en el ID de organización. 5324 5325### Nuevas Herramientas de Gestión 5326 5327La función multi-clave introduce cinco nuevas herramientas MCP especÃficamente para gestión de claves: 5328 5329- **\`list_api_keys()\`**: Ver todas las claves configuradas con etiquetas y metadatos 5330- **\`get_key_organizations(key_id)\`**: Listar organizaciones accesibles por una clave especÃfica 5331- **\`set_default_key(key_id)\`**: Establecer una clave por defecto para la sesión actual 5332- **\`discover_all_organizations()\`**: Poblar la caché de organización a clave 5333- **\`find_organization_by_name(name)\`**: Buscar una organización a través de todas las claves 5334 5335Estas herramientas proporcionan control completo sobre flujos de trabajo multi-cliente mientras mantienen la simplicidad de operación con una sola clave cuando se gestiona solo una organización. 5336 5337## Arquitectura Técnica: Bajo el Capó 5338 5339Entender la arquitectura técnica proporciona insight sobre cómo se implementan estas caracterÃsticas. 5340 5341### Infraestructura de Búsqueda Vectorial 5342 5343**Base de Datos Vectorial Qdrant**: El sistema usa Qdrant como base de datos vectorial local, almacenando embeddings de endpoints en una estructura de colección que soporta búsqueda de similitud rápida. La colección persiste en \`./data/meraki_api_collection/\`, asegurando que el Ãndice sobreviva reinicios del servidor sin sobrecarga de regeneración. 5344 5345**Modelo FastEmbed**: El modelo BAAI/bge-small-en-v1.5 fue elegido por su balance de precisión y eficiencia. Con 33 millones de parámetros, proporciona fuerte comprensión semántica mientras permanece lo suficientemente ligero para ejecutarse localmente sin aceleración GPU. El modelo se carga de forma diferida, minimizando el tiempo de arranque cuando la búsqueda semántica no se necesita inmediatamente. 5346 5347**Algoritmo de Potenciación de Puntuación**: Las puntuaciones de similitud vectorial en bruto se mejoran a través de potenciación contextual: 5348- Coincidencias exactas de nombre de método: +0.25 de potenciación 5349- Términos de consulta en nombre de método: +0.08 por término 5350- Términos de consulta en nombre de sección: +0.04 por término 5351- Simplicidad del nombre de método: +0.03 para nombres más cortos 5352 5353Esta puntuación multi-factor asegura que mientras el significado semántico es primario, consideraciones prácticas como simplicidad del nombre y presencia de términos refinan la clasificación para mejor experiencia de usuario. 5354 5355### Arquitectura Multi-Clave 5356 5357**MerakiMultiClient**: Una nueva clase de cliente gestiona el ciclo de vida de las claves API. Parsea la configuración, instancia clientes API del Dashboard de Meraki separados para cada clave, mantiene la caché de organización a clave y proporciona la lógica de resolución. 5358 5359**Registro Diferido de Herramientas**: Las cinco herramientas de gestión de claves solo se registran con el servidor MCP cuando se detectan múltiples claves. Las configuraciones de una sola clave no ven cambios en la interfaz, manteniendo compatibilidad hacia atrás. 5360 5361**Estrategia de Caché**: Las listas de organizaciones se cachean por clave API con un TTL de 5 minutos, balanceando frescura con eficiencia de lÃmite de tasa de API. La caché de mapeo de organización a clave persiste por la vida del servidor, ya que estas relaciones raramente cambian. 5362
5363### CaracterÃsticas de Rendimiento 5364 5365- **Latencia de Búsqueda Semántica**: <50ms tiempo promedio de consulta 5366- **Tiempo de Generación de Ãndice**: ~30 segundos para 816 endpoints (operación única) 5367- **Huella de Memoria**: +15MB para cliente Qdrant y embeddings 5368- **Almacenamiento en Disco**: 2-5 MB para Ãndice completo de endpoints 5369- **Impacto en Tasa de API**: MÃnimoâel descubrimiento de organizaciones se cachea, la búsqueda es local 5370 5371### Despliegue con Docker 5372 5373La última actualización incluye soporte mejorado de Docker con un proceso de construcción multi-etapa que reduce el tamaño de imagen y mejora la eficiencia de caché. La publicación automatizada asegura que \`selentai/selent-mcp:latest\` siempre esté actualizado con las últimas caracterÃsticas. 5374 5375El despliegue se simplifica a un solo comando: 5376 5377\`\`\`bash 5378docker run -d \\ 5379 -e MERAKI_API_KEY="tu_clave_o_claves" \\ 5380 --name selent-mcp \\ 5381 selentai/selent-mcp:latest 5382\`\`\` 5383 5384Para despliegues multi-clave, simplemente proporciona el formato de clave separado por comas o etiquetado en la variable de entorno. 5385 5386## Beneficios del Mundo Real para MSPs y Equipos de Red 5387 5388Estas capacidades técnicas se traducen en mejoras operacionales concretas: 5389 5390### Para Proveedores de Servicios Gestionados 5391 5392**Gestión desde un Solo Panel**: En lugar de mantener instancias separadas del servidor MCP o configuraciones de integración para cada cliente, los MSPs pueden desplegar un servidor Selent MCP que maneja inteligentemente todos los contextos de clientes. 5393 5394**Reducción del Cambio de Contexto**: Al abordar un problema de cliente, simplemente referencia su ID o nombre de organizaciónâel sistema usa automáticamente la clave API correcta. No se requiere búsqueda manual de claves ni cambios de configuración. 5395 5396**Prevención de Errores**: La resolución automática de claves ayuda a evitar ejecutar llamadas API con la clave API incorrecta, lo que puede resultar en errores 404 o acceso a datos de la organización equivocada. 5397 5398**Eficiencia Operacional**: Las operaciones por lotes a través de múltiples clientes se vuelven sencillasâitera a través de organizaciones y deja que el sistema maneje la resolución de claves automáticamente. 5399 5400### Para Ingenieros de Red 5401 5402**Descubrimiento de API Más Rápido**: En lugar de buscar en documentación o memorizar nombres de endpoints, describe lo que necesitas en lenguaje natural e inmediatamente obtén los endpoints relevantes con puntuaciones de confianza. 5403 5404**Reducción de Carga Cognitiva**: La búsqueda semántica maneja el mapeo de "lo que quiero hacer" a "qué endpoint de API lo hace", permitiendo a los ingenieros enfocarse en operaciones de red en lugar de mecánicas de API. 5405 5406**Amigable para Exploración**: Cuando no estás seguro del endpoint exacto, la búsqueda semántica devuelve opciones relacionadas, ayudando a los ingenieros a descubrir capacidades que podrÃan no haber sabido que existÃan. 5407 5408### Para Equipos de Desarrollo 5409 5410**Integración Simplificada**: Las aplicaciones construidas sobre Selent MCP heredan tanto el descubrimiento semántico como la gestión multi-clave sin implementar estas caracterÃsticas ellos mismos. 5411 5412**Mantenimiento Reducido**: A medida que la API de Meraki evoluciona, el indexado automático de endpoints significa que las integraciones no necesitan actualizaciones para soportar nuevos endpointsâson automáticamente descubribles a través de búsqueda semántica. 5413 5414**Mejor Experiencia de Usuario**: Las aplicaciones pueden exponer consultas de operaciones de red en lenguaje natural a los usuarios finales, abstrayendo completamente la complejidad de la API. 5415 5416### Caso de Uso Concreto: Respuesta a Incidentes Multi-Cliente 5417 5418Considera un MSP respondiendo a un problema de red a través de múltiples sitios de clientes: 5419 54201. **Descubrimiento**: "Encuentra todas las organizaciones con la palabra 'retail' en su nombre" â El sistema busca a través de todas las claves API 54212. **Evaluación**: "Muéstrame el estado de dispositivos para la organización 123456" â Usa automáticamente la clave correcta 54223. **Investigación**: "Obtén reglas de firewall para la red N_abc123" â Enruta a la clave de la organización apropiada 54234. **Remediación**: Las consultas en lenguaje natural guÃan al ingeniero a los endpoints de API correctos para hacer cambios 54245. **Verificación**: Las consultas usan automáticamente el contexto organizacional correcto en todo momento 5425 5426Este flujo de trabajo habrÃa requerido anteriormente gestión manual de claves, búsquedas en documentación y seguimiento cuidadoso del contextoâtodo ahora manejado automáticamente. 5427 5428## Comenzando 5429 5430### Despliegue 5431 5432Despliega el último servidor Selent MCP usando Docker: 5433 5434\`\`\`bash 5435# Obtener la última imagen 5436docker pull selentai/selent-mcp:latest 5437 5438# Despliegue de una sola clave 5439docker run -d \\ 5440 -e MERAKI_API_KEY="tu_clave_api" \\ 5441 --name selent-mcp \\ 5442 selentai/selent-mcp:latest 5443 5444# Despliegue MSP multi-clave 5445docker run -d \\ 5446 -e MERAKI_API_KEY="cliente_a:clave1,cliente_b:clave2,cliente_c:clave3" \\ 5447 --name selent-mcp \\ 5448 selentai/selent-mcp:latest 5449\`\`\` 5450 5451### Configuración Inicial 5452 5453Después del despliegue, genera la colección de búsqueda semántica (operación única): 5454 5455\`\`\`bash 5456docker exec selent-mcp python -m selent_mcp.scripts.generate_collection 5457\`\`\` 5458 5459Esto indexa todos los endpoints de la API de Meraki y almacena los embeddings vectoriales en Qdrant. 5460 5461Para despliegues multi-clave, ejecuta el descubrimiento de organizaciones para habilitar la resolución automática de claves: 5462 5463\`\`\`bash 5464# Usa la herramienta MCP a través de tu cliente 5465discover_all_organizations() 5466\`\`\` 5467 5468### Probando la Búsqueda Semántica 5469 5470Prueba consultas en lenguaje natural para explorar la capacidad de búsqueda semántica: 5471 5472- "obtener mis organizaciones" 5473- "verificar configuración de puerto del dispositivo" 5474- "mostrar reglas de firewall de red" 5475- "listar clientes conectados" 5476 5477Cada consulta devuelve resultados clasificados con puntuaciones de confianza, ayudándote a entender qué endpoints mejor coinciden con tu intención. 5478 5479### Migración desde Versiones Anteriores 5480 5481Actualizar desde una versión anterior de Selent MCP es sencillo: 5482 54831. Obtén la última imagen de Docker 54842. Reinicia tu contenedor con la misma configuración de clave API 54853. Ejecuta el script de generación de colección una vez 54864. (Opcional) Configura múltiples claves API si gestionas múltiples organizaciones 5487 5488Los despliegues existentes de una sola clave continúan funcionando sin cambios de configuración. Las caracterÃsticas multi-clave y búsqueda semántica son aditivasâno alteran el comportamiento de las llamadas API existentes o invocaciones de herramientas. 5489 5490## Conclusión 5491 5492La última actualización de Selent MCP introduce dos mejoras significativas para trabajar con la API del Dashboard de Cisco Meraki. Al combinar búsqueda semántica impulsada por IA con gestión multi-organización, hemos agregado capacidades que hacen la API más accesible a través de consultas en lenguaje natural y simplifican los flujos de trabajo multi-cliente. 5493 5494Para Proveedores de Servicios Gestionados que gestionan múltiples redes de clientes, el soporte multi-clave reduce la sobrecarga operacional de gestionar instancias de integración separadas. Para ingenieros de red, la búsqueda semántica proporciona una forma más eficiente de descubrir endpoints de API sin búsquedas extensas en documentación. 5495 5496Estas caracterÃsticas están construidas sobre una base técnica robustaâbúsqueda vectorial Qdrant, modelos de IA FastEmbed y estrategias de caché inteligentesâque proporciona buenas caracterÃsticas de rendimiento. La arquitectura está diseña
5496da para mantenibilidad: a medida que la API de Meraki evoluciona, la búsqueda semántica puede adaptarse a través de re-indexación, y el sistema multi-clave escala para acomodar bases de clientes crecientes. 5497 5498Esta actualización muestra cómo la IA puede mejorar la experiencia de trabajar con APIs de infraestructura, ayudando a pasar de flujos de trabajo basados en memorización hacia interacciones más basadas en intención. 5499 5500**Pruébalo**: Despliega el último servidor Selent MCP y experimenta el descubrimiento de API en lenguaje natural por ti mismo. Agradecemos tu feedback mientras continuamos mejorando las capacidades de Selent para gestionar redes Cisco Meraki. 5501 5502--- 5503 5504*Selent MCP está disponible en [github.com/selent-ai/selent-mcp](https://github.com/selent-ai/selent-mcp). Para preguntas, feedback o soporte, contacta a nuestro equipo o abre un issue en GitHub.* 5505`},{slug:"customer-feedback-shapes-selent",title:"Escuchando, Aprendiendo y Lanzando: Cómo el Feedback de Clientes Moldea la Evolución de Selent",excerpt:"Detrás de cada nueva capacidad que construimos hay un problema del mundo real, observado y validado junto a las personas que gestionan entornos de red todos los dÃas. Descubre cómo el feedback de clientes se transformó en nuestra actualización más impactante hasta ahora.",date:"2025-10-17",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Producto",tags:["CustomerFeedback","ProductDevelopment","NetworkAutomation","CiscoMeraki","MassDeployment","ConfigurationManagement","AIOps"],coverImage:"/selent-feedback-loop.png",featured:!0,draft:!1,readTime:"4 min",content:` 5506En el entorno actual de operaciones de red, el ritmo del cambio es implacable. Las organizaciones están conectando más dispositivos, usuarios y servicios que nunca antes, mientras la expectativa de tiempo de actividad y seguridad permanece absoluta. Sin embargo, detrás de cada configuración, actualización de firmware o ajuste de topologÃa, hay un desafÃo creciente: cómo ejecutar cambios rápida y seguramente, sin depender de procesos manuales propensos a errores. 5507 5508Los equipos modernos de TI y NOC conocen bien esta realidad. Un solo puerto de switch mal configurado o una regla de VLAN inconsistente puede cascadearse en interrupciones, violaciones de cumplimiento o pérdida de productividad. A medida que las redes crecen en complejidadâabarcando nubes hÃbridas, sitios distribuidos y endpoints IoTâla necesidad de gestión de configuración automatizada, auditable y consistente se ha vuelto esencial. En este contexto, la automatización no es solo un ahorro de tiempo; es la base de la excelencia operativa. 5509 5510En Selent, hemos adoptado esta filosofÃa desde el principio. Nuestra misión siempre ha sido transformar el feedback del campoâde ingenieros, socios y proveedores de serviciosâen soluciones prácticas e inteligentes que mejoren las operaciones diarias de red. Cada nueva capacidad que construimos comienza con un problema del mundo real, observado y validado junto a las personas que gestionan estos entornos todos los dÃas. 5511 5512## Convirtiendo el Feedback en Acción 5513 5514Cuando lanzamos el respaldo y restauración impulsado por IA de Selent para Cisco Meraki, rápidamente nos dimos cuenta de que nuestros usuarios no solo buscaban resilienciaâquerÃan velocidad, estandarización y control a escala. Una de las preguntas más frecuentes de nuestros clientes y socios fue: 5515 5516**"¿Podemos aplicar configuraciones consistentes de puertos de switch a través de múltiples redesâinstantánea y seguramente?"** 5517 5518Esa solicitud simple pero poderosa se convirtió en el plano de una de nuestras actualizaciones más impactantes hasta la fecha. Después de meses de colaboración, pruebas e iteración con nuestro ecosistema de socios global, estamos orgullosos de introducir una nueva capacidad que redefine cómo los equipos gestionan entornos Meraki a gran escala. 5519 5520## Despliegue Masivo de Configuraciones de Puertos de Switch â Con Solo Un Clic 5521 5522La nueva función permite a los administradores: 5523 5524- **Seleccionar una plantilla de configuración predefinida.** 5525- **Aplicarla a cientos de switches simultáneamente, a través de una o múltiples redes.** 5526- **Validar resultados automáticamente** â asegurando que cada camb
5526io se aplique de manera segura y consistente. 5527 5528Esto significa que los equipos de TI ahora pueden aplicar configuraciones estandarizadas de VLAN, polÃticas de seguridad o configuraciones de PoE en toda su infraestructura en segundos. Al eliminar el trabajo manual repetitivo, Selent reduce drásticamente el riesgo de error humano y acelera los cronogramas de despliegueâtodo mientras mantiene visibilidad y control completos a través de nuestros flujos de trabajo seguros y auditables. 5529 5530## Diseñado con Socios, para Socios 5531 5532Nuestros Socios Tecnológicos y Proveedores de Servicios Gestionados han sido parte integral de este viaje. Sus insights de gestionar entornos multi-tenant nos ayudaron a asegurar que esta función no solo escale técnicamente, sino que también se alinee con las prácticas operativas del mundo realâdesde el despliegue y reporte de cumplimiento hasta la gestión de niveles de servicio. Este modelo de colaboración está en el corazón de cómo Selent evoluciona: co-creando con aquellos que viven y respiran operaciones de red todos los dÃas. 5533 5534## Qué Sigue 5535 5536La capacidad de despliegue masivo marca un paso importante hacia la visión más amplia de Selent de automatización agénticaâdonde los agentes impulsados por IA manejan verificaciones de cumplimiento, monitoreo de salud, remediación de configuración e insights predictivos sin problemas a través del ecosistema de Meraki. 5537 5538Las actualizaciones futuras extenderán la misma eficiencia de "un clic" a áreas de configuración adicionales y flujos de trabajo de automatización, asegurando que Selent siga siendo la capa inteligente entre la intención operativa y la ejecución de red. 5539 5540Porque cuando nuestros clientes y socios comparten sus desafÃos, no solo escuchamosâconstruimos soluciones juntos. 5541 5542## Descubre la nueva función hoy 5543 5544Inicia sesión en [selent.ai](https://selent.ai) y explora el nuevo módulo de Despliegue Masivo en tu dashboard. Experimenta cómo un clic puede hacer la gestión de configuración más rápida, segura e inteligente. 5545`},{slug:"securing-ai-network-automation",title:"Cómo Asegurar la Automatización de Redes Impulsada por IA: Mejores Prácticas y Amenazas Emergentes",excerpt:"La automatización impulsada por IA puede detectar anomalÃas más rápido y ejecutar cambios de configuración en segundos. Pero la misma automatización que acelera las operaciones también puede amplificar el riesgo si no se controla. Aprende cómo construir automatización segura e inteligente para tu infraestructura de red.",date:"2025-10-09",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Seguridad",tags:["AI","NetworkSecurity","CyberSecurity","AIOps","CiscoMeraki","ZeroTrust","Compliance","NetworkAutomation"],coverImage:"/networking_ai_automation.png",featured:!0,draft:!1,readTime:"7 min",content:` 5546A medida que la inteligencia artificial remodela cómo las redes son gestionadas, monitoreadas y optimizadas, un nuevo desafÃo emerge silenciosamente en paralelo: cómo mantener estos sistemas inteligentes seguros. 5547 5548La automatización impulsada por IA puede detectar anomalÃas más rápido, predecir fallos antes de que ocurran, y ejecutar cambios de configuración en segundos. Pero la misma automatización que acelera las operaciones también puede amplificar el riesgo si no se controla. Un solo modelo defectuoso, conjunto de datos envenenado, o instrucción no autorizada podrÃa empujar configuraciones erróneas a través de cientos de sitios en segundos. 5549 5550En Selent, creemos que la próxima evolución de las operaciones de red depende no solo de la automatización inteligente, sino de la **automatización segura**. 5551 5552## Nuevas Amenazas en la Era de las Redes con IA 5553 5554La seguridad de red tradicional se enfocaba en endpoints, credenciales y defensas perimetrales. La IA introduce una capa adicional de riesgo: 5555 5556### Envenenamiento de Datos 5557Los atacantes manipulan los datos de entrenamiento o retroalimentación usados por los modelos, llevando a predicciones incorrectas o automatización insegura. En contextos de automatización de red, esto podrÃa significar introducir gradualmente patrones que la IA aprende como "normales" pero que en realidad son dañinos. 5558 5559### Manipulación de Modelos 5560La lógica de la IA misma puede ser alterada, produciendo acciones sesgadas o inseguras. Cuando el modelo que decide qué configuraciones aplicar está comprometido, cada decisión se vuelve sospechosa. 5561 5562### Inyección de Prompts y Uso Indebido de Comandos 5563Cuando la IA recibe instrucciones en lenguaje natural, prompts maliciosos o ambiguos podrÃan desencadenar comportamientos no deseados. Un atacante con acceso limitado podrÃa crear prompts que engañen a la IA para revelar información sensible o hacer cambios no autorizados. 5564 5565### Configuración Errónea Automatizada 5566Un bug o patrón mal aprendido podrÃa replicar un error a escala, más rápido de lo que cualquier operador humano podrÃa intervenir. Lo que tomarÃa horas propagar manualmente puede suceder en toda tu infraestructura en segundos. 5567 5568### Toma de Decisiones Opaca 5569Cuando los modelos actúan como "cajas negras," es difÃcil auditar por qué se hizo un cambioâo revertirlo con confianza. Sin transparencia en el razonamiento de la IA, la resolución de problemas se convierte en adivinanza. 5570 5571## Mejores Prácticas para Asegurar la Automatización Impulsada por IA 5572 5573Asegurar los sistemas de IA en redes requiere un enfoque multicapa. Aquà están los principios que guÃan nuestro diseño en Selent y que toda organización deberÃa adoptar: 5574 5575### 1. Arquitectura de Confianza Cero para Agentes de IA 5576 5577Trata cada componente de IAâmodelos, APIs, y conectoresâcomo no confiable por defecto. Aplica autenticación y autorización granular, asegurando que cada agente solo pueda acceder a los recursos que verdaderamente necesita. 5578 5579**En la práctica:** 5580- Implementa controles de acceso basados en roles para sistemas de IA 5581- Usa autorización consciente del contexto (tiempo, alcance, patrones históricos) 5582- Segmenta los sistemas de IA por lÃmites de redâun compromiso en un área no deberÃa afectar toda la infraestructura 5583 5584### 2. Gobernanza de Modelos y Control de Versiones 5585 5586Mantén un versionado estricto de los modelos de IA y sus configuraciones. Cada actualización debe ser rastreable, probada en entornos sandbox, y firmada digitalmente antes del despliegue. 5587 5588**Acciones clave:** 5589- Rastrea todos los cambios de modelo en control de versiones 5590- Requiere pruebas en entornos aislados antes de producción 5591- Implementa firma criptográfica para despliegues de modelos 5592- Mantén capacidades de rollback para recuperación rápida 5593 5594### 3. Integridad y Procedencia de Datos 5595 5596Rastrea de dónde viene cada conjunto de datos y quién lo modificó. Implementa capas de validación que detecten anomalÃas o patrones inyectados antes de que influyan en los modelos de producción. 5597 5598**Implementación:** 5599- Verifica criptográficamente las fuentes de datos de entrenamiento 5600- Monitorea patrones inusuales en feeds de datos 5601- Establece lÃneas base para caracterÃsticas normales de datos 5602- Alerta sobre desviaciones que podrÃan indicar intentos de envenenamiento 5603 5604### 4. Supervisión Humana en el Bucle 5605 5606Incluso en entornos autónomos, las acciones crÃticasâcomo cambios de configuración a gran escala o rollbacksâdeberÃan requerir revisión o aprobación humana. La automatización deberÃa aumentar, no reemplazar, la responsabilidad. 5607 5608**Principios de diseño:** 5609- Define lÃmites claros para la acción autónoma 5610- Requiere aprobación humana para cambios de alto impacto 5611- Proporciona capacidades de anulación de emergencia y apagado 5612- Asegura que la IA pueda explicar sus decisiones antes de actuar 5613 5614### 5. Monitoreo Continuo y Detección de AnomalÃas 5615 5616Despliega IA para vigilar la IA. Los agentes de meta-monitoreo pueden identificar desviaciones en el comportamiento del modelo, deriva en la precisión, o patrones de tráfico inesperados resultantes de decisiones de IA. 5617 5618**Estrategia de monitoreo:** 5619- Rastrea métricas de rendimiento de IA a lo largo del tiempo 5620- Alerta sobre cambios de comportamiento en sistemas de IA 5621- Monitorea patrones de decisión por anomalÃas 5622- Mantén logs de auditorÃa comprehensivos 5623 5624### 6. Auditabilidad y Explicabilidad 5625 5626Cada acción automatizada debe ser explicable y auditable. Los logs, diffs semánticos, y trazas de decisiones permiten a los equipos entender qué pasó, por qué, y cuándo. 5627 5628**Requisitos:** 5629- Mantén logs detallados de todas las decisiones de IA 5630- Proporciona explicaciones claras para los cambios 5631- Rastrea entradas, razonamiento, y salidas 5632- Habilita análisis forense cuando surjan problemas 5633 5634## La Perspectiva de Selent: Seguro por Diseño 5635 5636En Selent, la seguridad no es una ocurrencia tardÃaâestá integrada en nuestra arquitectura. 5637 5638Nuestros Agentes de Respaldo y Restauración y Cumplimiento ya operan bajo principios de confianza cero, con respaldos encriptados, llamadas a API con alcance de acceso, y diffs rastreables que muestran cada camb
5638io en lenguaje simple. 5639 5640A medida que evolucionamos hacia operaciones de red autónomas, nuestro objetivo es claro: empoderar a los equipos de TI y NetOps con automatización inteligente que sea predictiva, explicable, e inherentemente segura. 5641 5642### Cómo Implementamos la Seguridad 5643 5644**Confianza Cero desde la Base**: Cada agente de Selent opera con los permisos mÃnimos requeridos. El acceso a la API está precisamente delimitado a lo que se necesita para cada operación. 5645 5646**Todo Encriptado**: Todos los respaldos están encriptados en reposo y en tránsito. Los datos de configuración están protegidos con estándares de encriptación de grado empresarial. 5647 5648**Cambios Transparentes**: Nuestra tecnologÃa de diff semántico traduce los cambios de configuración a lenguaje simple, facilitando entender exactamente qué cambió y por qué. 5649 5650**Pistas de AuditorÃa**: Cada acción se registra con contexto completoâquién la solicitó, cuándo ocurrió, qué cambió, y el razonamiento detrás de ella. 5651 5652**Supervisión Humana**: Las operaciones crÃticas pueden configurarse para requerir aprobación explÃcita, asegurando que los humanos permanezcan en control de las decisiones importantes. 5653 5654## Qué Sigue 5655 5656La IA continuará impulsando la eficiencia y resiliencia en la infraestructura modernaâpero solo si está construida sobre una base de confianza. 5657 5658Las organizaciones que combinan la velocidad de la automatización con la disciplina de la seguridad liderarán la próxima generación de gestión de redes. 5659 5660La pregunta no es si adoptar la automatización de IAâes cómo adoptarla de forma segura. A medida que evalúas plataformas y construyes tu estrategia de automatización, prioriza: 5661 5662- **Transparencia**: Elige soluciones donde puedas entender y auditar las decisiones de IA 5663- **Control**: Asegura que puedes anular, detener, o revertir las acciones de IA cuando sea necesario 5664- **Seguridad por diseño**: Busca plataformas construidas con principios de seguridad desde la base 5665- **Prácticas comprobadas**: Adopta confianza cero, monitoreo continuo, y supervisión humana 5666 5667Si te gustarÃa explorar cómo integrar la IA de forma segura en tu stack de red, [contáctanos](https://selent.ai/contact) o [agenda una demo](https://selent.ai/demo) con nuestro equipo en selent.ai. 5668 5669--- 5670 5671*El futuro de las operaciones de red es inteligente y automatizado. Asegúrate de que también sea seguro.* 5672`},{slug:"ai-agents-network-operations",title:"Más Allá del Respaldo y Restauración: Usando Agentes de IA para Transformar las Operaciones de Red",excerpt:"El respaldo, restauración y listas de verificación de cumplimiento te mantienen listo para auditorÃas, pero no detendrán la próxima interrupción. Descubre cómo los agentes de IA predicen y previenen problemas en redes Cisco Meraki antes de que los usuarios lo noten.",date:"2025-09-17",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"AIOps",tags:["AIOps","CiscoMeraki","NetworkAutomation","Compliance","AI"],coverImage:"https://images.unsplash.com/photo-1544197150-b99a580bb7a8?q=80&w=1974&auto=format&fit=crop&ixlib=rb-4.1.0",featured:!0,draft:!1,readTime:"7 min",content:` 5673Son las 3:12 AM y tu ingeniero de guardia está mirando otra alerta urgente. El trabajo de respaldo tuvo éxito, los informes de cumplimiento están ordenados, y el monitoreo acaba de señalar un pico de latencia que ya está impactando a los usuarios. Para cuando se encuentra la causa raÃz, el daño está hecho. En 2025, los manuales reactivos son demasiado lentos para entornos hÃbridos y distribuidos de Cisco Meraki que cambian cientos de veces al dÃa. 5674 5675Los flujos de trabajo de respaldo, restauración y cumplimiento son fundamentalesâmantienen a los auditores tranquilos y dan a los equipos un seguro cuando las cosas salen mal. Pero mantenerse competitivo ahora demanda algo más: inteligencia proactiva que predice, previene y resuelve problemas antes de que se conviertan en interrupciones. Esa es la promesa de agentes impulsados por IA como Selent Agent. 5676 5677## Por Qué el Respaldo, Restauración y Cumplimiento Solo No Son Suficientes 5678 5679La mayorÃa de los equipos de Meraki dependen de tres pilares fundamentales: 5680 5681- **Respaldo y Restauración** asegura que puedas volver atrás ante errores humanos, fallos de dispositivos, o incidentes importantes. 5682- **Cumplimiento** satisface a los reguladores, polÃticas internas, y marcos de seguridad. 5683- **Monitoreo y Alertas** sacan a la superficie problemas cuando se superan umbrales o los logs muestran anomalÃas. 5684 5685Los tres importanâpero son inherentemente reactivos. Ves un problema, luego respondes. En redes de alta velocidad, ese retraso crea riesgo empresarial: 5686 5687- Los costos de tiempo de inactividad promedian **$9,000 por minuto** para empresas medianas. 5688- El 58% de los cambios de red se retrasan porque los equipos temen introducir nuevos problemas. 5689- Las investigaciones manuales estiran el Tiempo Medio de Reparación (MTTR) a horas en lugar de minutos. 5690 5691Las organizaciones que quieren mantenerse resilientes necesitan sistemas que vigilen continuamente, aprendan de cada señal, y tomen acciones inteligentes en el momento en que aparece el riesgo. 5692 5693## Llegan los Agentes de IA para Operaciones de Red 5694 5695Los agentes de IA combinan automatización, observabilidad e inteligencia de máquina para gestionar redes con mÃnima intervención humana. Cuando se emparejan con la telemetrÃa de Meraki, desbloquean nuevas capacidades: 5696 5697| Capacidad | Enfoque Tradicional | Enfoque Mejorado con Agentes de IA | 5698| --- | --- | --- | 5699| Detección en tiempo real | Las alertas se disparan después de que se cruzan los umbrales | Predecir anomalÃas emergentes antes de que se disparen los umbrales | 5700| Remediación automatizada | Los ingenieros investigan y ejecutan correcciones manualmente | Los agentes inician respuestas pre-aprobadas (reiniciar servicios, redirigir tráfico) | 5701| Desviación de configuración | Las auditorÃas periódicas detectan brechas después del hecho | Detección continua de desviación con auto-correcciones seguras |
5702| Escalado y capacidad | Los planes dependen del uso histórico y suposiciones | Pronóstico de demanda con guÃa de escalado proactivo | 5703| Respuesta de seguridad | Los incidentes se manejan después de indicadores de compromiso | Predicción de amenazas y polÃticas de contención automatizadas | 5704| Eficiencia operativa | Los equipos pierden horas combatiendo problemas repetitivos | Menor MTTR, menos tareas manuales, y mayor confiabilidad | 5705 5706En lugar de esperar alertas rojas, los agentes de IA mantienen las operaciones en un estado constante de optimización. 5707 5708## Cómo Selent Agent Eleva las Redes Cisco Meraki 5709 5710Selent Agent fue diseñado especÃficamente para conectarse a las APIs y flujos de telemetrÃa de Meraki, convirtiendo datos crudos en inteligencia accionable. 5711 5712### Observabilidad e Insights Continuos 5713Selent ingiere continuamente eventos de dispositivos, métricas de rendimiento y cambios de topologÃa. Aprende cómo se ve lo "normal" para cada sitio, luego detecta desviaciones o riesgos de rendimiento mucho antes que los usuarios. El resultado: advertencia temprana sobre degradación del servicio, no solo luces rojas después del hecho. 5714 5715### Remediación Proactiva y Manejo de Alertas 5716Cuando aparecen anomalÃas, el agente puede notificar a los ingenieros antes o ejecutar runbooks automatizados para escenarios aprobados. Piensa en failovers de VPN automatizados, ajustes de polÃticas, o rollbacks de configuración ejecutados en minutosâno horas. 5717 5718### Automatización de PolÃticas y Cumplimiento 5719El cumplimiento deja de ser una tarea trimestral. Selent Agent valida configuraciones contra polÃticas internas y marcos externos en tiempo real, señala desviaciones instantáneamente, y puede corregir las fáciles automáticamente. Te mantienes listo para auditorÃas todos los dÃas, no solo en época de auditorÃa. 5720 5721### Detección de AnomalÃas y Análisis de Causa RaÃz 5722En lugar de lanzar alertas por encima de la cerca, el agente explica por qué algo salió mal. Correlaciona cambios recientes, servicios dependientes, e incidentes históricos para sacar a la superficie las causas raÃz probables. Los ingenieros saltan directamente a la resolución en lugar de perseguir pistas ciegas. 5723 5724### Despliegue Escalable y Gobernanza 5725Ya sea que gestiones 10 ubicaciones o 1,000, Selent Agent aplica lÃneas base consistentes a través del patrimonio de Meraki. Los equipos definen barandas una vez, luego dejan que los agentes gestionen la ejecución y reporte del dÃa a dÃa. 5726 5727## Resultados de Negocio que Puedes Esperar 5728 5729Las organizaciones que despliegan Selent Agent reportan resultados que se extienden mucho más allá de las operaciones de TI: 5730 5731- **Tiempo de inactividad reducido y recuperación más rápida** gracias a la detección predictiva y remediación automatizada. 5732- **Eficiencia operativa** a medida que los equipos pasan del triaje de tickets a proyectos estratég
5732icos. 5733- **Postura de seguridad más fuerte** con cumplimiento continuo y aplicación de polÃticas en tiempo real. 5734- **Costos operativos más bajos** impulsados por menos incidentes, uso optimizado de recursos, y menos trabajo manual. 5735- **Consistencia escalable** que mantiene los proyectos de expansión en calendario sin sacrificar estándares. 5736 5737## Qué Evaluar Antes de Desplegar Agentes de IA 5738 5739La automatización de IA es poderosa, pero necesita las barandas correctas. Tu lista de verificación deberÃa incluir: 5740 5741- **Acceso a datos e integraciones:** Confirma que el agente puede ingerir telemetrÃa de Meraki, logs, y datos de nube relacionados. 5742- **Redes de seguridad y anulaciones:** Requiere aprobaciones, rollbacks, o despliegues escalonados para acciones de alto impacto. 5743- **Transparencia:** Exige logs de actividad y recomendaciones explicables para que los equipos puedan confiar en los resultados. 5744- **Alineación regulatoria:** Asegura que la automatización respete los requisitos de privacidad, retención, y control de cambios. 5745- **Personalización de polÃticas:** Mapea las acciones del agente a los estándares únicos de tu organización y apetito de riesgo. 5746- **Momentum del proveedor:** Busca una hoja de ruta activa, adopción rápida de nuevas fuentes de telemetrÃa, y soporte receptivo. 5747 5748## Tus Primeros 30 DÃas con Selent Agent 5749 57501. **Semana 1 â LÃnea Base:** Conecta las organizaciones Meraki clave, importa polÃticas, y establece una lÃnea base del MTTR actual y volumen de incidentes.
57512. **Semana 2 â Observar:** Ejecuta agentes en "modo de recomendación" para ver insights sin acción automatizada. 57523. **Semana 3 â Automatizar de Forma Segura:** Activa la auto-remediación para escenarios de bajo riesgo (ej., correcciones de desviación de configuración). 57534. **Semana 4 â Expandir:** Añade aplicación de cumplimiento, construye dashboards de liderazgo, y documenta victorias tempranas para las partes interesadas. 5754 5755Dentro de un mes, la mayorÃa de los equipos ven menos escalaciones nocturnas, informes de cumplimiento más limpios, y reducciones medibles de MTTR. 5756 5757## La Conclusión 5758 5759Los flujos de trabajo de respaldo, restauración y cumplimiento siguen siendo esencialesâson la red de seguridad que todo entorno Meraki necesita. Pero las redes modernas demandan más que un seguro reactivo. Los agentes de IA como Selent Agent entregan observabilidad continua, remediación proactiva, y la confianza de que tus operaciones se mantienen resilientes a medida que tu patrimonio crece. 5760 5761Si tu equipo todavÃa pasa noches revisando logs de respaldo o persiguiendo alertas después de que los clientes se quejan, es hora de ir más allá de las listas de verificación. Convirtamos las operaciones de red en una ventaja proactiva. 5762 5763[Solicita una demo](https://c87b31wu7aq.typeform.com/to/UuTqiop3) para ver cómo Selent Agent puede transformar tu entorno Meraki de reactivo a auto-optimizado. 5764`},{slug:"selent-agent-aiops-cisco-meraki",title:"Presentando Selent Agent: Agentes de IA Especializados para Operaciones de Cisco Meraki",excerpt:"Despliega agentes especializados que analizan, monitorean y optimizan continuamente tus redes Merakiâentregando insights automatizados y remediación guiada cuando surgen problemas.",date:"2025-09-09",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Producto",tags:["AIOps","NetworkAutomation","CiscoMeraki","AI","NetworkMonitoring","Compliance"],coverImage:"https://images.unsplash.com/photo-1597733336794-12d05021d510?q=80&w=1974&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D",featured:!0,draft:!1,readTime:"8 min",content:` 5765Gestionar redes Cisco Meraki a escala requiere vigilancia constante. Los equipos de red monitorean cientos de métricas, rastrean requisitos de cumplimiento y responden a problemas en ubicaciones distribuidasâa menudo simultáneamente. Es un trabajo complejo que demanda tanto experiencia profunda como disponibilidad inmediata. 5766 5767Hoy, presentamos Selent Agent: un conjunto de agentes de IA especializados que trabajan junto a tu equipo para analizar, monitorear y optimizar continuamente tu infraestructura Meraki. 5768 5769## El DesafÃo de la Escala en las Operaciones de Red 5770 5771Las empresas modernas dependen de sus redes para todo. Cuando surgen problemas, el impacto se propaga a través de la organizaciónâdesde pérdidas de productividad hasta impactos en los ingresos. Sin embargo, los equipos de red están estirados al lÃmite, gestionando entornos cada vez más complejos con recursos limitados. 5772 5773El enfoque tradicional de monitoreo manual y respuesta reactiva crea varios problemas: 5774 5775- Los problemas crÃticos a menudo pasan desapercibidos hasta que los usuarios se quejan 5776- Los equipos pierden tiempo investigando falsos positivos 5777- Las verificaciones de cumplimiento ocurren esporádicamente, creando ventanas de riesgo 5778- Las brechas de conocimiento emergen cuando miembros clave del equipo no están disponibles 5779 5780¿Qué pasarÃa si pudieras tener expertos especializados vigilando continuamente tu red, analizando patrones y proporcionando insights accionables? 5781 5782## Conoce a tu Equipo de Agentes Especializados 5783 5784Selent Agent adopta un enfoque enfocado hacia la inteligencia de red. En lugar de intentar resolver todo con una sola herramienta, hemos desarrollado agentes especializados que sobresalen en aspectos especÃficos de las operaciones de red: 5785 5786### Agente de Análisis de Red 5787Este agente examina continuamente tu topologÃa de red, patrones de tráfico y configuraciones de dispositivos. Entiende las relaciones entre componentes y puede identificar problemas que podrÃan no ser obvios a partir de métricas individuales. 5788 5789Cuando algo sale malâcomo un dispositivo que se desconectaâel Agente de Análisis de Red no solo te alerta. Proporciona contexto sobre lo que está sucediendo, causas potenciales, y el impacto más amplio en tu red. 5790 5791### Agente de Cumplimiento 5792Mantener el cumplimiento no es una actividad únicaâes un requisito continuo. El Agente de Cumplimiento monitorea continuamente tus configuraciones contra tus polÃticas de seguridad y requisitos regulatorios. 5793 5794En lugar de apresurarte durante la temporada de auditorÃas, tienes visibilidad continua de tu postura de cumplimiento. El agente señala desviaciones inmediatamente y proporciona pasos especÃficos de remediación para traer las configuraciones de vuelta al cumplimiento. 5795 5796### Agente de Salud 5797La salud de la red va más allá del simple estado de arriba/abajo. El Agente de Salud rastrea el rendimiento de dispositivos, utilización de recursos y factores ambientales para identificar problemas potenciales antes de que impacten las operaciones. 5798 5799Al analizar tendencias a lo largo del tiempo, puede predecir cuándo los dispositivos podrÃan fallar o cuándo podrÃan surgir problemas de capacidad, dándote tiempo para abordar los problemas proactivamente. 5800 5801### Agente de Monitoreo 5802El Agente de Monitoreo proporciona visibilidad en tiempo real del estado de la red en todas tus ubicaciones. Pero a diferencia del monitoreo tradicional que te inunda con alertas, aprende el comportamiento normal de tu red para reducir drásticamente los falsos positivos. 5803 5804Entiende qué problemas son crÃticos y cuáles pueden esperar, asegurando que tu equipo se enfoque en lo que más importa. 5805 5806## Cómo Funciona en la Práctica 5807 5808Veamos cómo Selent Agent transforma las operaciones del dÃa a dÃa: 5809 5810### Análisis Programado 5811Seleccionas redes especÃficas y programas agentes para que se ejecuten automáticamente en segundo plano. Elige verificaciones de salud diarias, auditorÃas de cumplimiento semanales, o monitoreo continuoâlo que coincida con tus necesidades operativas. 5812 5813### Reportes Automatizados 5814Cuando los agentes completan su análisis, recibes informes detallados por correo electrónico. Estas no son actualizaciones de estado genéricasâson insights accionables especÃficos para tu entorno, destacando lo que necesita atención y por qué. 5815 5816### Contexto Histórico 5817Cada análisis se registra y es accesible a través de la plataforma. Puedes rastrear tendencias a lo largo del tiempo, entender problemas recurrentes, y demostrar cumplimiento a través de pistas de auditorÃa comprehensivas. 5818 5819### Resolución Interactiva de Problemas 5820Aquà es donde se pone interesante. Cuando un agente identifica un problema, no solo re
5820cibes una alertaâpuedes tener una conversación con ese agente especializado para entender el problema y explorar soluciones. 5821 5822## Un Ejemplo Real: De la Detección a la Resolución 5823 5824Déjame mostrarte cómo funciona esto con un escenario real que encontramos: 5825 5826El Agente de Análisis de Red detectó un dispositivo fuera de lÃnea en una de nuestras redes monitoreadas. Pero no se detuvo en la detección. El agente analizó el contexto de la red e identificó que este no era cualquier dispositivoâera un switch crÃtico que afectaba múltiples conexiones downstream. 5827 5828A través de la interfaz conversacional, el equipo pudo hacer preguntas: 5829- "¿Cuál es el impacto de esta interrupción?" 5830- "¿Cuáles son las posibles causas?" 5831- "¿Cuál es la remediación recomendada?" 5832 5833El agente proporcionó orientación especÃfica basada en la topologÃa de la red y los cambios recientes. El equipo fue al dashboard de Meraki, implementó la corrección, y observó cómo el dispositivo volvÃa a estar en lÃnea y las métricas regresaban a la normalidad. 5834 5835Lo que tradicionalmente podrÃa haber tomado horas de investigación se resolvió en minutos. 5836 5837## Mira Selent Agent en Acción 5838 5839Observa cómo los agentes especializados transforman las operaciones de red a través de análisis automatizado y remediación guiada: 5840 5841<iframe width="560" height="315" src="https://www.youtube.com/embed/-zHmXzHzf5o" title="Demo de Selent Agent" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe> 5842 5843## El Valor de la Inteligencia Especializada 5844 5845### Profundidad Sobre Amplitud
5846Cada agente está diseñado especÃficamente para su dominio. El Agente de Cumplimiento entiende marcos regulatorios y mejores prácticas de seguridad. El Agente de Salud conoce las lÃneas base de rendimiento y patrones de fallo. Esta especialización significa análisis más precisos y mejores recomendaciones. 5847 5848### Cobertura Continua 5849Los agentes trabajan 24/7, proporcionando cobertura cuando tu equipo no está disponible. Los problemas del fin de semana no esperan hasta el lunes. Los problemas nocturnos se detectan inmediatamente. Tu red recibe la atención que merece durante todo el dÃa. 5850 5851### Preservación del Conocimiento 5852Cada interacción con los agentes construye conocimiento institucional. Los nuevos miembros del equipo pueden aprovechar la misma experiencia especializada que los veteranos. Cuando alguien se va, su conocimiento no se va con ellos. 5853 5854### Proactivo vs. Reactivo 5855En lugar de esperar a que los problemas impacten a los usuarios, los agentes identifican problemas temprano. Detectan tendencias, predicen fallos, y recomiendan optimizaciones. Tu equipo pasa de combatir incendios a prevenirlos. 5856 5857## Integración con tu Flujo de Trabajo Existente 5858 5859### Funciona con el Dashboard de Meraki 5860Selent Agent no reemplaza tu dashboard de Merakiâlo mejora. Aún usas la interfaz familiar de Meraki para configuración y gestión. Los agentes proporcionan la capa de inteligencia que guÃa tus acciones. 5861 5862### Programación Flexible 5863Ejecuta agentes en tu horario. Verificaciones de salud diarias para redes crÃticas. AuditorÃas de cumplimiento semanales para entornos regulados. Monitoreo continuo para sitios con requisitos de alta disponibilidad. 5864 5865### Acceso por Email y Plataforma 5866Recibe informes donde los quieras. El correo electrónico entrega insights directamente a tu bandeja de entrada. La plataforma proporciona contexto histórico y análisis de tendencias. Elige lo que funcione para tu flujo de trabajo. 5867 5868### Integración de API 5869Para organizaciones con automatización existente, Selent Agent proporciona acceso API a resultados e insights de agentes. Integra con tu sistema de tickets, SIEM, o plataforma de automatización. 5870 5871## Comenzando 5872 5873### Empieza Pequeño 5874Comienza con un agente en tus redes más crÃticas. Ve el valor antes de expandir la cobertura. La mayorÃa de los equipos comienzan con el Agente de Monitoreo para visibilidad inmediata o el Agente de Cumplimiento para preparación de auditorÃas. 5875 5876### Construye Confianza 5877A medida que veas resultados, expande la cobertura. Añade más redes. Despliega agentes adicionales. Aumenta la automatización. La plataforma crece con tu confianza y necesidades. 5878 5879### Mide el Impacto 5880Rastrea métricas que importan: 5881- Tiempo de detección de incidentes 5882- Velocidad de resolución 5883- Puntuaciones de cumplimiento 5884- Productividad del equipo 5885 5886La mayorÃa de las organizaciones ven mejoras medibles dentro del primer mes. 5887 5888## El Elemento Humano 5889 5890Vale la pena enfatizar: Selent Agent no reemplaza a los ingenieros de red. Amplifica sus capacidades. 5891 5892Los agentes manejan el análisis rutinario, el monitoreo continuo, y la investigación inicial. Los ingenieros se enfocan en decisiones estratégicas, resolución de problemas complejos, y optimización de red. Se trata de hacer más con el mismo equipo, no de reemplazar la experiencia humana. 5893 5894La interfaz conversacional significa que los ingenieros pueden aprovechar la inteligencia del agente mientras aplican su juicio y experiencia. Es una asociación donde la IA maneja el análisis de datos y el reconocimiento de patrones mientras los humanos toman decisiones e implementan soluciones. 5895 5896## Mirando Hacia Adelante 5897 5898Las operaciones de red están evolucionando. La complejidad solo aumentará a medida que las redes crezcan y se vuelvan más crÃticas para las operaciones del negocio. Los enfoques manuales que funcionaban para redes más pequeñas y simples no escalan a los requisitos modernos. 5899 5900Selent Agent representa un paso práctico hacia operaciones de red inteligentes. No una visión lejana de redes completamente autónomas, sino una solución que puedes desplegar hoy que entrega valor inmediato mientras construye hacia ese futuro. 5901 5902Al desplegar agentes especializados que entienden tu entorno Meraki especÃfico, no solo estás resolviendo los problemas de hoyâestás construyendo una base para operaciones de red escalables e inteligentes. 5903 5904--- 5905 5906*¿Listo para desplegar agentes especializados para tus redes Meraki? Descubre cómo Selent Agent puede proporcionar análisis continuo, asegurar el cumplimiento, y guiar a tu equipo a través de la resolución de problemas.* 5907`},{slug:"open-sourcing-selent-mcp",title:"Liberando Selent MCP como Código Abierto: Acceso Dinámico a la API de Meraki a través del Model Context Protocol",excerpt:"Anunciando nuestro primer proyecto de código abierto: un servidor de Model Context Protocol que proporciona acceso dinámico a toda la API del Dashboard de Cisco Meraki a través de descubrimiento y ejecución inteligentes.",date:"2025-08-18",author:"Fabian Levinsky",authorImage:"/fabian.jpeg",authorTitle:"Head of Engineering",authorBio:"Fabian is the Head of Engineering at Selent, leading backend systems, AI engineering, and frontend development. With deep expertise in distributed systems and intelligent automation, he architects the core technology that powers Selent's network operations platform.",category:"Código Abierto",tags:["OpenSource","MCP","Meraki","API","NetworkAutomation","AI"],coverImage:"https://images.unsplash.com/photo-1558494949-ef010cbdcc31?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"8 min",content:` 5908Hoy, lanzamos nuestro primer proyecto de código abierto: **Selent MCP** - un servidor de Model Context Protocol que proporciona acceso dinámico a toda la API del Dashboard de Cisco Meraki. En lugar de construir herramientas estáticas para endpoints individuales, hemos diseña
5908do una solución que descubre y ejecuta cualquiera de las más de 400 llamadas a la API de Meraki bajo demanda. 5909 5910## El Problema Técnico que Resolvimos 5911 5912Trabajar con la API del Dashboard de Meraki tÃpicamente requiere construir integraciones individuales para cada endpoint. Con más de 400 endpoints disponibles a través de organizaciones, dispositivos, redes y funciones de seguridad, este enfoque crea una sobrecarga significativa de desarrollo y carga de mantenimiento. 5913 5914Las soluciones tradicionales obligan a los equipos a un ciclo doloroso: 5915 5916- **Creación manual de herramientas** para cada endpoint de la API 5917- **Validación de parámetros codificada** que se rompe con actualizaciones de la API 5918- **Manejo de errores personalizado** por endpoint, llevando a comportamientos inconsistentes 5919- **Mantenimiento constante** a medida que se lanzan nuevas caracterÃsticas de la API 5920 5921Para los equipos de ingenierÃa de red que gestionan docenas de redes Meraki, esto significaba semanas de tiempo de desarrollo solo para acceder a funcionalidades básicas - tiempo que podrÃa gastarse en optimización y automatización real de la red. 5922 5923## Nuestro enfoque de ingenierÃa: Descubrimiento y Ejecución Dinámicos 5924 5925Selent MCP resuelve esto a través de descubrimiento inteligente de la API y ejecución dinámica. El sistema utiliza coincidencia semántica para mapear consultas en lenguaje natural a endpoints de API apropiados, luego valida dinámicamente los parámetros y ejecuta las llamadas. 5926 5927### Arquitectura central 5928 5929\`\`\` 5930Resolución Dinámica de Endpoints 5931âââ Coincidencia semántica de consultas 5932âââ Auto-descubrimiento de parámetros 5933âââ Validación en tiempo real 5934âââ Framework de ejecución genérico 5935 5936Despliegue en Producción 5937âââ Containerización Docker 5938âââ Pulls de imagen con auto-actualización 5939âââ Configuración basada en variables de entorno 5940âââ Logging comprehensivo 5941\`\`\` 5942 5943### CaracterÃsticas técnicas clave 5944 5945**Motor de Descubrimiento**: La búsqueda semántica a través de la documentación de endpoints de la API elimina la necesidad de que los desarrolladores memoricen cientos de nombres de endpoints y parámetros. 5946
5947**Resolución de Parámetros**: La detección y validación dinámica de parámetros significa que el sistema se adapta a los cambios de la API automáticamente, sin requerir actualizaciones de código. 5948 5949**Capa de Ejecución**: Un cliente de API genérico con manejo comprehensivo de errores proporciona un comportamiento consistente a través de todos los endpoints. 5950 5951**Estrategia de Caché**: La optimización del rendimiento para consultas comunes reduce las llamadas a la API y mejora los tiempos de respuesta. 5952 5953## Ejemplos de implementación: De Lenguaje Natural a Llamadas a la API 5954 5955El sistema traduce lenguaje natural directamente a llamadas a la API correctamente formateadas: 5956 5957\`\`\`shell 5958# Consulta: "Obtener configuración del puerto 4 del dispositivo Q4AB-WMAB-TAZU" 5959# Se resuelve a: switch.getDeviceSwitchPort(serial="Q4AB-WMAB-TAZU", portId="4") 5960 5961# Consulta: "Listar clientes de la red con datos de tráfico" 5962# Se resuelve a: networks.getNetworkClients(networkId="N_xxx", timespan=3600) 5963 5964# Consulta: "Mostrar reglas de firewall para dispositivos MX" 5965# Se resuelve a: appliance.getNetworkApplianceFirewallL3FirewallRules(networkId="N_xxx") 5966\`\`\` 5967 5968Este enfoque transforma cómo los equipos de red interactúan con la API de Meraki - de búsquedas complejas de documentación y construcción de parámetros a consultas simples en lenguaje natural. 5969 5970## MÃralo en Acción 5971 5972Observa cómo Selent MCP transforma las interacciones con la API de Meraki a través de consultas en lenguaje natural en Claude: 5973 5974<div style="position: relative; padding-bottom: 57.401490947816825%; height: 0;"><iframe src="https://www.loom.com/embed/e4d592b38a8a453c8abb81812bf096d6?sid=b644742f-8754-42d2-85ad-68b05605a751" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe></div> 5975 5976## Beneficios de ingenierÃa que importan 5977 5978### Escalabilidad sin complejidad 5979 5980Una sola implementación soporta todos los endpoints actuales y futuros de la API de Meraki. Cuando Cisco lanza nuevas caracterÃsticas de la API, se vuelven inmediatamente disponibles sin ningún cambio de código. 5981 5982### Cero sobrecarga de mantenimiento 5983 5984No se requiere mantenimiento de código por endpoint. El sistema se adapta a los cambios de la API automáticamente, eliminando la carga de mantenimiento tradicional. 5985 5986### Rendimiento optimizado 5987 5988El caché inteligente y la optimización de llamadas únicas entregan tiempos de respuesta de menos de 2 segundos para operaciones comunes, con ratios de acierto de caché superiores al 90%. 5989 5990### Confiabilidad empresarial 5991 5992El manejo genérico de errores y la lógica de reintentos a través de todos los endpoints asegura un comportamiento consistente, mientras que la limitación de velocidad incorporada previene problemas de throttling de la API. 5993 5994## Despliegue listo para producción 5995 5996Hemos diseñado esto especÃficamente para entornos de producción donde la confiabilidad y facilidad de despliegue son crÃticas: 5997 5998\`\`\`shell 5999# Despliegue en producción con actualizaciones automáticas 6000docker run \\ 6001 --pull=always \\ 6002 -e MERAKI_API_KEY=$MERAKI_API_KEY \\ 6003 -i --rm selentai/selent-mcp:latest 6004\`\`\` 6005 6006La bandera \`--pull=always\` asegura que tu despliegue reciba actualizaciones automáticamente sin intervención manual. Las verificaciones de salud del contenedor y el logging comprehensivo proporcionan la visibilidad operativa que los entornos de producción demandan. 6007 6008## Implementación del Model Context Protocol 6009 6010Construido sobre la especificación del Model Context Protocol de Anthropic, Selent MCP implementa la interfaz MCP completa: 6011 6012- **Interfaz MCP Estándar**: Compatible con cualquier cliente MCP (Claude Desktop, integraciones personalizadas, etc.) 6013- **Descubrimiento de Recursos**: Enumeración dinámica de endpoints para exploración de la API en tiempo real 6014- **Ejecución de Herramientas**: Llamadas a la API parametrizadas con validación inteligente de parámetros 6015- **Propagación de Errores**: Respuestas de error estructuradas que proporcionan retroalimentación accionable 6016 6017## Por qué liberamos esto como código abierto 6018 6019La automatización de redes no deberÃa requerir reinventar los mismos patrones de integración repetidamente. Estamos lanzando esto como código abierto para: 6020 6021### Acelerar la adopción en la industria 6022 6023Eliminar las barreras técnicas que impiden a los equipos aprovechar las poderosas capacidades de la API de Meraki. 6024 6025### Fomentar la innovación comunitaria 6026 6027Permitir que los ingenieros de red y desarrolladores contribuyan mejoras que beneficien a todo el ecosistema. 6028 6029### Estandarizar patrones de integración 6030 6031Proporcionar una interfaz consistente y confiable de la que las organizaciones puedan depender a través de diferentes proyectos y equipos. 6032 6033### Eliminar el desarrollo redundante 6034 6035Dejar de desperdiciar ciclos de ingenierÃa construyendo las mismas integraciones de API una y otra vez. 6036 6037## Especificaciones técnicas 6038 6039### CaracterÃsticas de rendimiento 6040 6041- **Latencia de arranque en frÃo**: <2 segundos para consultas comunes 6042- **Ratio de acierto de caché**: >90% para operaciones repetidas
6043- **Huella de memoria**: <100MB contenedor base 6044- **Cumplimiento de API**: Limitación de velocidad incorporada y lógica de reintentos 6045 6046## Comenzando: De Cero a Integración de API en minutos 6047 6048Para los equipos de ingenierÃa listos para integrar: 6049 6050\`\`\`shell 6051# Clonar y desplegar localmente para desarrollo 6052git clone [repository-url] 6053cd selent-mcp 6054docker-compose up -d 6055 6056# O usar imagen pre-construida para producción 6057docker run --pull=always selentai/selent-mcp:latest 6058\`\`\` 6059 6060Configura tu cliente MCP (Claude Desktop, integración de API personalizada, etc.) para conectarse al endpoint del servidor, y estarás listo para comenzar a consultar la API de Meraki con lenguaje natural. 6061 6062## Hoja de ruta de ingenierÃa: Qué Sigue 6063 6064Este lanzamiento representa nuestra implementación MCP fundamental, construida con extensibilidad en mente. Nuestra hoja de ruta de ingenierÃa incluye: 6065 6066### Optimizaciones de rendimiento 6067 6068El análisis de patrones de uso impulsará mejoras de rendimiento dirigidas, incluyendo caché predictivo y optimización de consultas. 6069 6070### Estrategias de caché extendidas 6071 6072Calentamiento de caché inteligente y caché jerárquico para operaciones complejas multi-endpoint. 6073 6074### Soporte multi-proveedor 6075 6076Extender el patrón de descubrimiento dinámico a otras APIs de gestión de red más allá de Meraki. 6077 6078### Diagnósticos mejorados 6079 6080Diagnósticos de error detallados y trazado de llamadas a la API para requisitos de depuración empresarial. 6081 6082El código base está arquitecturado para contribución comunitaria, con abstracciones limpias y documentación comprehensiva diseñadas para facilitar el desarrollo externo. 6083 6084## Acceso y documentación 6085 6086- **Código Fuente**: [URL del Repositorio GitHub] 6087- **Imágenes de Contenedor**: \`docker pull selentai/selent-mcp:latest\` 6088- **Documentación Técnica**: Referencia completa de la API y guÃas de integración en el README del repositorio 6089- **Soporte Comunitario**: Issues y discusiones a través de GitHub 6090 6091## El panorama general 6092 6093Este proyecto representa más que solo otra herramienta de integración de API, es nuestro compromiso de avanzar la automatización de redes a través de herramientas inteligentes y adaptativas. Al eliminar la fricción entre los ingenieros de red y las APIs con las que necesitan trabajar, estamos habilitando a los equipos para enfocarse en lo que importa: construir redes resilientes y optimizadas. 6094 6095La comunidad de ingenierÃa ha demostrado consistentemente que la colaboración abierta produce las soluciones más robustas e innovadoras. Estamos emocionados de ver cómo los ingenieros de red, desarrolladores y especialistas en automatización construyen sobre esta base para resolver desafÃos que ni siquiera hemos imaginado todavÃa. 6096 6097La automatización de redes deberÃa ser accesible, confiable e inteligente. Con Selent MCP, finalmente lo es. 6098 6099--- 6100 6101*¿Listo para transformar tu enfoque de integración con la API de Meraki? Clona el repositorio y comienza a construir automatización de red más inteligente hoy.* 6102`},{slug:"executive-guide-aiops-networking",title:"La GuÃa Ejecutiva de AIOps: Transformando las Operaciones de Red en la Empresa Digital",excerpt:"Un resumen estratégico para lÃderes empresariales sobre cómo la Inteligencia Artificial para Operaciones de TI transforma la gestión de redes de un centro de costos a una ventaja competitiva.",date:"2025-08-01",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"GuÃa Ejecutiva",tags:["AIOps","DigitalTransformation","NetworkAutomation","ExecutiveStrategy","ROI"],coverImage:"https://images.unsplash.com/photo-1558494949-ef010cbdcc31?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"12 min",content:` 6103## Resumen Ejecutivo 6104 6105En el entorno empresarial hiperconectado de hoy, el rendimiento de la red impacta directamente la experiencia del cliente, la productividad de los empleados y la generación de ingresos. Sin embargo, los enfoques tradicionales de gestión de redes luchan por mantener el ritmo con la complejidad de la infraestructura moderna. Aquà es donde AIOpsâInteligencia Artificial para Operaciones de TIâemerge como una capacidad transformadora para las organizaciones con visión de futuro. 6106 6107AIOps representa un cambio fundamental en cómo las empresas gestionan su infraestructura de red. Al aplicar inteligencia artificial avanzada y aprendizaje automático a las operaciones de red, las organizaciones pueden transformarse de la lucha reactiva contra incendios a la optimización proactiva. Para las empresas que operan en plataformas gestionadas en la nube como Cisco Meraki, AIOps desbloquea una visibilidad, automatización e inteligencia sin precedentes en todo su ecosistema de red. 6108 6109El caso de negocio es convincente: las empresas que implementan AIOps reportan retornos promedio de $3.50 por cada dólar invertido, con reducciones de gastos operativos del 42% y tiempos de resolución de incidentes reducidos entre un 30-50%. Más allá de los números, AIOps permite a los equipos de TI cambiar su enfoque del mantenimiento rutinario a la innovación estratég
6109ica, apoyando directamente las iniciativas de transformación digital. 6110 6111Esta guÃa proporciona a los ejecutivos una comprensión clara de las capacidades de AIOps, los beneficios empresariales y las implicaciones estratégicas. Ya sea que estés evaluando inversiones en tecnologÃa, planificando la transformación digital, o buscando ventajas competitivas a través de la excelencia operativa, entender AIOps es esencial para la toma de decisiones informada en la economÃa digital actual. 6112 6113## Entendiendo AIOps: Una Perspectiva Empresarial 6114 6115### ¿Qué es AIOps? 6116 6117En su esencia, AIOps es la aplicación de inteligencia artificial a las operaciones de TI. Piensa en ello como crear un "sistema inmunológico digital" para tu infraestructura de redâuno que automáticamente identifica, diagnostica y responde a problemas antes de que impacten tu negocio. 6118 6119Para los ejecutivos, AIOps se traduce en tres capacidades fundamentales: 6120 61211. **Inteligencia Predictiva**: Anticipar problemas antes de que ocurran 61222. **Respuesta Automatizada**: Resolver problemas sin intervención humana 61233. **Optimización Continua**: Aprender y mejorar de cada interacción 6124 6125### La Evolución de Operaciones Manuales a Inteligentes 6126 6127La gestión de redes tradicional sigue un patrón familiar: algo se rompe, las alarmas suenan, los ingenieros investigan, y eventualmente el problema se soluciona. Este ciclo reactivo consume recursos, impacta la productividad, y a menudo resulta en tiempo de inactividad visible para el cliente. 6128 6129AIOps transforma este paradigma. En lugar de esperar a que los problemas se manifiesten, los sistemas inteligentes analizan continuamente los patrones de red, predicen problemas potenciales, y a menudo los resuelven antes de que alguien lo note. Es la diferencia entre visitas a urgencias y atención médica preventiva. 6130 6131### Por Qué los Enfoques Tradicionales Se Quedan Cortos 6132 6133Las empresas modernas operan redes de escala y complejidad sin precedentes. Una empresa tÃpica de mediano tamaño gestiona cientos de dispositivos de red en múltiples ubicaciones, soportando miles de usuarios y aplicaciones. Los enfoques de gestión tradicionales simplemente no pueden escalar para satisfacer estas demandas: 6134 6135- **Limitaciones humanas**: Los ingenieros de red pueden monitorear docenas de métricas; la IA puede analizar millones 6136- **Requisitos de velocidad**: Los negocios modernos demandan respuesta instantánea; los procesos manuales toman horas 6137- **Crecimiento de complejidad**: Las redes crecen exponencialmente más complejas; la capacidad humana permanece lineal 6138- **Escalada de costos**: Agregar personal para gestionar el crecimiento se vuelve prohibitivamente caro 6139 6140## El Impacto Empresarial de la Inteligencia de Red 6141 6142### De Centro de Costos a Activo Estratégico 6143 6144Tradicionalmente, la infraestructura de red ha sido vista como un costo necesarioâcomo la electricidad o la plomerÃa. AIOps cambia fundamentalmente esta perspectiva, transformando las redes en habilitadores estratégicos del negocio que impulsan ventajas competitivas. 6145 6146Considera cómo la inteligencia de red impacta las métricas core del negocio: 6147 6148**Experiencia del Cliente** 6149- 99.99% de tiempo de actividad se vuelve alcanzable y sostenible 6150- Los problemas de rendimiento se resuelven antes de que los clientes los noten 6151- La entrega de servicios se vuelve predecible y confiable 6152 6153**Eficiencia Operativa** 6154- La productividad del personal de TI aumenta en un 50% o más 6155- Las tareas rutinarias se automatizan, liberando recursos para la innovación 6156- Los tiempos de resolución de problemas bajan de horas a minutos 6157 6158**Agilidad Empresarial** 6159- Los nuevos servicios se despliegan más rápido con validación inteligente 6160- El escalado se vuelve predecible y automatizado 6161- El riesgo de cambios disminuye a través del análisis predictivo 6162 6163### Indicadores Clave de Rendimiento que Importan 6164 6165Al evaluar el impacto de AIOps, enfócate en métricas que afectan directamente los resultados del negocio: 6166 61671. **Tiempo Medio de Resolución (MTTR)**: Reducido entre 50-70% 61682. **Gastos Operativos**: Disminuidos entre 35-45% 61693. **Disponibilidad del Servicio**: Mejorada de 99.5% a 99.99% 61704. **Productividad de TI**: Aumentada entre 40-60% 61715. **Satisfacción del Cliente**: Mejorada entre 25-35% 6172 6173### Resultados Empresariales del Mundo Real 6174 6175Las organizaciones lÃderes ya están realizando beneficios significativos de la implementación de AIOps: 6176 6177**Cadena Minorista Global**: Un minorista de 2,000 ubicaciones redujo los cierres de tiendas relacionados con la red en un 95%, ahorrando $4.2M anuales en ventas perdidas. 6178 6179**Red de Salud**: Un sistema hospitalario mejoró la confiabilidad de la red al 99.99%, asegurando que los sistemas crÃticos de atención al paciente permanezcan disponibles. 6180 6181**Servicios Financieros**: Un banco regional redujo la preparación de auditorÃas de cumplimiento de semanas a horas mientras mejoraba su postura de seguridad. 6182 6183## El Viaje: De Operaciones Reactivas a Predictivas 6184 6185### El Modelo de Madurez de AIOps 6186 6187Las organizaciones tÃpicamente progresan a través de cuatro etapas en su viaje de AIOps: 6188 6189#### Etapa 1: Visibilidad y Monitoreo 6190- Vista integral de la salud de la red 6191- Métricas de rendimiento en tiempo real 6192- Alertas y dashboards consolidados 6193- **Impacto Empresarial**: Identificación más rápida de problemas, reducción de puntos ciegos 6194 6195#### Etapa 2: Respuesta y Remediación Automatizada 6196- Resolución automática de problemas comunes 6197- Priorización inteligente de alertas 6198- Automatización de flujos de trabajo 6199- **Impacto Empresarial**: 50% de reducción en intervenciones manuales 6200 6201#### Etapa 3: Optimización Predictiva 6202- Anticipación de problemas antes de que ocurran 6203- Planificación de capacidad y pronósticos 6204- Ajuste proactivo del rendimiento 6205- **Impacto Empresarial**: 70% de reducción en incidentes 6206 6207#### Etapa 4: Operaciones Autónomas 6208- Infraestructura auto-reparable 6209- Optimización continua 6210- Automatización alineada con el negocio 6211- **Impacto Empresarial**: TI se convierte en impulsor de innovación 6212 6213### Ejemplos de Progresión Práctica 6214 6215La mayorÃa de las organizaciones comienzan su viaje abordando puntos de dolor especÃficos: 6216 6217**Año 1**: Implementar monitoreo y alertas automatizadas 6218- Reducir falsas alarmas en un 80% 6219- Reducir el tiempo de respuesta a incidentes a la mitad 6220 6221**Año 2**: Desplegar remediación automatizada 6222- Eliminar el 60% de las tareas manuales 6223- Mejorar la productividad del equipo en un 40% 6224 6225**Año 3**: Alcanzar capacidades predictivas 6226- Prevenir el 70% de los cortes potenciales 6227- Habilitar la planificación proactiva del negocio 6228 6229## Beneficios Estratégicos para la Empresa 6230 6231### Excelencia Operativa 6232 6233AIOps entrega mejoras medibles a través de las métricas operativas: 6234 6235**Optimización de Recursos** 6236- Reducir la sobrecarga operativa en un 40%
6237- Reasignar el 50% del tiempo de TI a proyectos estratégicos 6238- Disminuir los requisitos de capacitación para nuevo personal 6239 6240**Mitigación de Riesgos** 6241- Prevenir el 70% de los incidentes de seguridad potenciales 6242- Asegurar cumplimiento continuo 6243- Reducir el error humano en un 80% 6244 6245**Calidad del Servicio** 6246- Lograr rendimiento consistente en todas las ubicaciones 6247- Entregar experiencia de usuario predecible 6248- Habilitar confiabilidad 24/7 sin personal 24/7 6249 6250### Aceleración de la Innovación 6251 6252Al automatizar las operaciones rutinarias, AIOps libera a tu equipo para enfocarse en la innovación: 6253 6254- Lanzar nuevos servicios un 60% más rápido 6255- Probar y desplegar cambios con confianza 6256- Experimentar sin miedo de romper la producción 6257- Alinear las iniciativas de TI con los objetivos del negocio 6258 6259### Diferenciación Competitiva 6260 6261En la economÃa digital de hoy, el rendimiento de la red impacta directamente la posición competitiva: 6262 6263- Una experiencia superior del cliente impulsa la lealtad 6264- La eficiencia operativa permite la competitividad en precios 6265- La agilidad permite una respuesta rápida a los cambios del mercado 6266- La confiabilidad construye confianza y reputación 6267 6268## ROI y Realización de Valor 6269 6270### El Caso Financiero de AIOps 6271 6272Las organizaciones que implementan AIOps tÃpicamente ven retornos dentro de 12-18 meses: 6273 6274**Ahorros de Costos Directos** 6275- Costos laborales reducidos entre 35-45% 6276- Costos de tiempo de inactividad disminuidos entre 60-80% 6277- Eficiencia de infraestructura mejorada entre 25-30% 6278 6279**Protección de Ingresos** 6280- Prevenir $500K-$2M en pérdidas anuales por tiempo de inactividad 6281- Mantener la satisfacción y retención del cliente 6282- Habilitar nuevos servicios generadores de ingresos 6283 6284**Valor Estratégico** 6285- Acelerar las iniciativas de transformación digital 6286- Mejorar el posicionamiento competitivo 6287- Mejorar la agilidad organizacional 6288 6289### Marco de Cálculo de ROI 6290 6291Para una empresa tÃpica con más de 500 dispositivos de red: 6292 6293**Costos Anuales Sin AIOps**: 6294- Personal de operaciones de red: $1.2M 6295- Impacto del tiempo de inactividad: $800K 6296- Costos de ineficiencia: $400K 6297- **Total: $2.4M** 6298 6299**Costos Anuales Con AIOps**: 6300- Plataforma AIOps: $300K 6301- Necesidades de personal reducidas: $700K 6302- Tiempo de inactividad mÃnimo: $100K 6303- **Total: $1.1M** 6304 6305**Beneficio Anual Neto**: $1.3M 6306**ROI**: 333% en tres años 6307**PerÃodo de Recuperación**: 9-12 meses 6308 6309### Más Allá de los Números 6310 6311Mientras las métricas financieras son importantes, AIOps entrega beneficios estratégicos que trascienden el simple ROI: 6312 6313- **Resiliencia Empresarial**: Capacidad de mantener operaciones durante interrupciones 6314- **Escalabilidad**: Soportar el crecimiento sin aumentos de costo proporcionales 6315- **Capacidad de Innovación**: Recursos liberados para la transformación digital 6316- **Capacidad de Respuesta al Mercado**: Agilidad para adaptarse a condiciones cambiantes 6317 6318## Consideraciones de Implementación 6319 6320### Preparación Organizacional 6321 6322La implementación exitosa de AIOps requiere más que tecnologÃa: 6323 6324**Alineación del Liderazgo** 6325- Patrocinio y visión ejecutiva 6326- Métricas claras de éxito 6327- Compromiso con la gestión del cambio 6328 6329**Factores Culturales** 6330- Disposición a adoptar la automatización 6331- Confianza en las decisiones impulsadas por IA 6332- Enfoque en la mejora continua 6333 6334**Evolución de Habilidades**
6335- Cambio de pensamiento reactivo a estratégico 6336- Desarrollo de nuevas competencias 6337- Ãnfasis en la alineación con el negocio 6338 6339### Factores de Ãxito 6340 6341Las organizaciones que realizan el máximo valor de AIOps comparten caracterÃsticas comunes: 6342 63431. **Comenzar con Objetivos Claros**: Definir resultados empresariales especÃficos 63442. **Implementación por Fases**: Comenzar con casos de uso de alto impacto 63453. **Medir el Progreso**: Rastrear métricas tanto técnicas como empresariales 63464. **Iterar y Mejorar**: Refinar continuamente basándose en resultados 63475. **Invertir en Gestión del Cambio**: Apoyar la transformación del equipo 6348 6349### Errores Comunes a Evitar 6350 6351Aprende de las experiencias de otros: 6352 6353- **No automatices procesos rotos**: Arregla los fundamentos primero 6354- **Evita el pensamiento de tecnologÃa primero**: Enfócate en resultados empresariales 6355- **No descuides la preparación del equipo**: Invierte en capacitación y apoyo 6356- **Resiste los enfoques de todo o nada**: Implementación por fases 6357- **No ignores los factores culturales**: Aborda la resistencia proactivamente 6358 6359## Preparando tu Estrategia de Red para el Futuro 6360 6361### Tendencias Emergentes que Moldean las Operaciones de Red 6362 6363Mantente adelante entendiendo hacia dónde se dirige la industria: 6364 6365**Redes Autónomas** 6366- Infraestructura auto-configurante 6367- Operaciones impulsadas por intención de negocio 6368- Aprovisionamiento sin intervención 6369 6370**Inteligencia en el Borde** 6371- Procesamiento de IA distribuido 6372- Toma de decisiones local en tiempo real 6373- Latencia y ancho de banda reducidos 6374 6375**AnalÃtica Predictiva de Negocio** 6376- Insights de red impulsando decisiones empresariales 6377- Correlación con métricas de negocio 6378- Planificación proactiva de capacidad 6379 6380### Consideraciones de Planificación Estratégica 6381 6382A medida que desarrollas tu estrategia de red, considera: 6383 63841. **Requisitos de Escalabilidad**: ¿Tu enfoque soportará un crecimiento de 10x? 63852. **Capacidades de Integración**: ¿Puedes aprovechar las inversiones existentes? 63863. **Ecosistema de Proveedores**: ¿Estás construyendo o comprando capacidades? 63874. **Desarrollo de Habilidades**: ¿Cómo evolucionarás las competencias del equipo? 63885. **Alineación con el Negocio**: ¿Tu estrategia apoya los objetivos corporativos? 6389 6390### Construyendo para las Necesidades del Mañana 6391 6392El ritmo del cambio continúa acelerándose. Las organizaciones que prosperarán serán aquellas que: 6393 6394- Adopten la automatización inteligente 6395- Se enfoquen en resultados empresariales sobre la tecnologÃa 6396- Inviertan en aprendizaje y adaptación continuos 6397- Construyan flexibilidad en sus estrategias 6398- Mantengan la seguridad y el cumplimiento como fundamentos 6399 6400## El Camino Hacia Adelante 6401 6402AIOps representa más que una actualización tecnológicaâes una transformación estratég
6402ica que posiciona a tu organización para el éxito en la economÃa digital. El viaje de operaciones reactivas a predictivas entrega beneficios operativos inmediatos mientras construye ventajas competitivas a largo plazo. 6403 6404Para los ejecutivos que evalúan esta transformación, las preguntas clave son: 6405 64061. ¿Puede tu organización permitirse mantener operaciones de status quo mientras los competidores avanzan? 64072. ¿Qué oportunidades de negocio podrÃas perseguir con un 50% más de capacidad de TI? 64083. ¿Cómo impactarÃa una confiabilidad de red del 99.99% en tus relaciones con clientes? 64094. ¿Cuál es el costo de no actuarâtanto en términos financieros como competitivos? 6410 6411La transición a operaciones de red inteligentes no es cuestión de si, sino de cuándo. Las organizaciones que se muevan decisivamente capturarán ventajas de primer movimiento, mientras que aquellas que se demoren arriesgan quedarse atrás en un mercado cada vez más digital. 6412 6413## Próximos Pasos 6414 6415¿Listo para explorar cómo AIOps puede transformar tus operaciones de red? Considera estas acciones inmediatas: 6416 64171. **Evaluar el Estado Actual**: Evalúa tu madurez operativa y puntos de dolor 64182. **Definir Métricas de Ãxito**: Establece objetivos empresariales claros 64193. **Construir el Caso de Negocio**: Calcula el ROI potencial para tu organización 64204. **Desarrollar una Hoja de Ruta**: Crea un plan de implementación por fases 64215. **Involucrar a las Partes Interesadas**: Alinea al liderazgo y los equipos en torno a la visión 6422 6423El viaje hacia operaciones de red inteligentes comienza con un solo paso. Para las organizaciones listas para transformar sus redes de centros de costo a activos estratég
6423icos, ese paso comienza hoy. 6424 6425--- 6426 6427*Esta guÃa ejecutiva proporciona una base para entender AIOps en operaciones de red. Para insights personalizados sobre cómo la automatización inteligente puede transformar tu entorno de red especÃfico, considera contactar expertos de la industria que puedan evaluar tus requisitos y oportunidades únicos.* 6428`},{slug:"automate-cisco-meraki-backup-restore",title:"Cómo Automatizar el Respaldo y Restauración de Configuraciones de Cisco Meraki",excerpt:"Aprende cómo las organizaciones modernas están automatizando sus respaldos de configuración de Cisco Meraki para evitar tiempo de inactividad, aprovechar la automatización y mantenerse protegidas.",date:"2025-07-25",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Técnico",tags:["CiscoMeraki","Automation","BackupRestore","NetworkAutomation","AIOps"],coverImage:"https://images.unsplash.com/photo-1558618666-fcd25c85cd64?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"11 min",content:` 6429**¿Cómo maneja tu empresa los respaldos y restauraciones de configuración de Cisco Meraki?** 6430 6431Si eres como la mayorÃa de las organizaciones, la respuesta probablemente involucra una mezcla de procesos manuales, scripts ocasionales, y los dedos cruzados. Pero aquà está la realidad: en una era donde la empresa promedio gestiona 309 redes y casi 1,800 dispositivos, la gestión manual de configuraciones se está volviendo imposible de sostener. 6432 6433¿La buena noticia? Las organizaciones lÃderes están transformando su enfoque de gestión de configuración de Merakiây viendo resultados notables. Desde tiempos de recuperación 95% más rápidos hasta millones en costos de tiempo de inactividad prevenidos, el cambio hacia la automatización está entregando valor de negocio medible. 6434 6435## El Estado de la Gestión de Configuración de Meraki Hoy 6436 6437### Dónde Se Encuentran las Organizaciones 6438 6439Nuestra investigación revela una división notable en cómo las empresas abordan la gestión de configuración de Meraki: 6440 6441- **45%** dependen de respaldos periódicos manuales (cuando alguien se acuerda) 6442- **28%** usan scripts básicos que se ejecutan ocasionalmente 6443- **19%** no tienen ninguna estrategia formal de respaldo 6444- **Solo el 8%** han implementado automatización integral 6445 6446Esto significa que el 92% de las organizaciones están operando con riesgo significativoâa un error de configuración de un tiempo de inactividad extendido. 6447 6448### El DesafÃo de la Complejidad Creciente 6449 6450Los entornos Meraki modernos han evolucionado mucho más allá de implementaciones simples. Las redes de hoy presentan: 6451 6452- **Arquitecturas multi-sitio** con mallas complejas de AutoVPN conectando cientos de ubicaciones 6453- **Configuraciones dinámicas** que cambian múltiples veces al dÃa a través de APIs e integraciones 6454- **Implementaciones basadas en plantillas** donde un cambio puede propagarse a través de regiones enteras 6455- **Entornos hÃbridos** mezclando infraestructura gestionada en la nube y local 6456 6457Esta complejidad hace que el seguimiento manual sea virtualmente imposible. Como señaló un arquitecto de red en un minorista Fortune 500: "Estábamos gastando más tiempo documentando cambios que haciéndolos. Y aún asà no podÃamos mantenernos al dÃa." 6458 6459## Entendiendo el Verdadero Impacto en el Negocio 6460 6461### Más Allá del Tiempo de Inactividad: El Efecto Dominó 6462 6463Cuando las configuraciones fallan, el impacto se extiende mucho más allá de la simple pérdida de conectividad. El análisis reciente de la industria muestra: 6464 6465**Impacto Inmediato en el Negocio:** 6466- Pérdida de ingresos promediando $5,600-$9,000 por minuto 6467- Pérdidas de productividad de empleados afectando a miles de trabajadores 6468- Degradación de la experiencia del cliente llevando a una tasa de abandono del 32% 6469- Violaciones de SLA activando cláusulas de penalización 6470 6471**Consecuencias a Largo Plazo:** 6472- Fallos en auditorÃas de cumplimiento resultando en multas de hasta $50 millones 6473- Vulnerabilidades de seguridad por polÃticas mal configuradas 6474- Acumulación de deuda técnica haciendo los cambios futuros más arriesgados 6475- Agotamiento del equipo por constante combate de incendios 6476 6477### Escenarios del Mundo Real que Mantienen Despiertos a los Equipos 6478 6479**El Fallo en Cascada:** En septiembre de 2024, un cambio rutinario de VLAN en un importante proveedor de salud desencadenó una reconfiguración de AutoVPN que se prop
6479agó a través de 150 clÃnicas. La recuperación tomó 14 horas y costó un estimado de $4.2 millones. 6480 6481**El Desastre de Plantilla:** La modificación de una plantilla de una cadena minorista afectó a 500 tiendas simultáneamente. Sin respaldos apropiados, cada ubicación requirió reconfiguración manualâun proceso que tomó tres semanas completar totalmente. 6482 6483**La Pesadilla de Cumplimiento:** Durante una auditorÃa sorpresa, una firma de servicios financieros no pudo probar sus configuraciones de red de 90 dÃas atrás. La investigación y remediación resultante costó $800,000 y dañó relaciones clave con clientes. 6484 6485## El Camino hacia la Excelencia en Automatización 6486 6487### Etapa 1: Establecer Visibilidad de Configuración 6488 6489El primer paso hacia la automatización es entender lo que tienes. Las organizaciones lÃderes comienzan por: 6490 6491**Crear un Inventario de Configuración:** 6492- Documentar todas las redes, dispositivos y plantillas 6493- Mapear dependencias de configuración 6494- Identificar componentes crÃticos vs. no crÃticos 6495- Establecer configuraciones de lÃnea base 6496 6497**Implementar Control de Versiones:** 6498- Tratar las configuraciones como código 6499- Rastrear todos los cambios con marcas de tiempo y atribución 6500- Crear flujos de trabajo de aprobación para modificaciones 6501- Mantener historial de configuración 6502 6503### Etapa 2: Construir Capacidades de Respaldo Automatizado 6504 6505Las estrategias modernas de respaldo van más allá de simples instantáneas: 6506 6507**Captura Continua de Configuración:** 6508- Detección en tiempo real de cambios de configuración 6509- Activación automática de respaldo basada en modificaciones 6510- Almacenamiento encriptado con redundancia geográfica 6511- PolÃticas de retención alineadas con requisitos de cumplimiento 6512 6513**Gestión Inteligente de Respaldos:** 6514- Deduplicación para optimizar almacenamiento 6515- Compresión sin perder fidelidad 6516- Etiquetado de metadatos para fácil recuperación 6517- Pruebas automatizadas de integridad de respaldos 6518 6519### Etapa 3: Implementar Recuperación Inteligente 6520 6521La verdadera prueba de cualquier sistema de respaldo es la restauración. Las organizaciones avanzadas implementan: 6522 6523**Capacidades de Recuperación Rápida:** 6524- Restauración con un clic a cualquier punto en el tiempo 6525- Opciones de recuperación granular (red completa o componentes especÃficos) 6526- Configuraciones pre-validadas para prevenir restauraciones inválidas 6527- Reversión automática si se detectan problemas 6528 6529**Estrategias de Despliegue Progresivo:** 6530- Despliegues canarios para probar configuraciones 6531- Lanzamientos por etapas con verificaciones automáticas de salud 6532- Activadores de reversión inmediata basados en métricas de rendimiento 6533- Ventanas de despliegue en horario laboral 6534 6535## La Revolución de la IA en la Gestión de Configuración 6536 6537### La Inteligencia Predictiva lo Cambia Todo 6538 6539La inteligencia artificial está transformando la gestión reactiva de configuración en optimización proactiva de red: 6540 6541**Predicción de Riesgo de Configuración:** 6542Los modelos de IA analizan cambios propuestos contra datos históricos para predecir problemas potenciales antes de la implementación. Un proveedor de telecomunicaciones redujo los incidentes relacionados con configuración en un 73% usando análisis predictivo. 6543 6544**Detección de AnomalÃas:** 6545Los algoritmos de aprendizaje automático monitorean continuamente el comportamiento de la red, correlacionando la degradación del rendimiento con cambios recientes de configuración. Esto permite la remediación automática antes de que los usuarios noten problemas. 6546 6547**Recomendaciones de Optimización:** 6548La IA analiza patrones de configuración a través de miles de redes para sugerir optimizaciones. Las mejoras comunes incluyen consolidación de polÃticas de seguridad, optimización de VLAN, y mejoras de enrutamiento de tráfico. 6549 6550### Gestión de Configuración con Lenguaje Natural 6551 6552El último avance permite a los ingenieros de red gestionar configuraciones usando comandos en lenguaje natural: 6553 6554- "Muéstrame todas las reglas de firewall agregadas en los últimos 30 dÃas" 6555- "Restaura la oficina de Boston a la configuración del martes pasado" 6556- "Compara la configuración actual de VPN con nuestra plantilla estándar" 6557 6558Esto democratiza la gestión de configuración, permitiendo a ingenieros junior realizar tareas complejas de manera segura. 6559 6560## Mejores Prácticas de LÃderes de la Industria 6561 6562### 1. Adoptar una Mentalidad GitOps 6563
6564Trata tus configuraciones de red como código de software: 6565- Usa estrategias de ramificación para probar cambios 6566- Implementa revisión por pares antes del despliegue a producción 6567- Mantén mensajes de commit detallados 6568- Crea pipelines de pruebas automatizadas 6569 6570### 2. Establecer Objetivos Claros de Recuperación 6571 6572Define y prueba regularmente tus capacidades de recuperación: 6573- **Objetivo de Tiempo de Recuperación (RTO):** ¿Qué tan rápido puedes restaurar? 6574- **Objetivo de Punto de Recuperación (RPO):** ¿Cuánta pérdida de datos es aceptable? 6575- **Alcance de Recuperación:** ¿Puedes restaurar granularmente o solo configuraciones completas? 6576- **Validación de Recuperación:** ¿Cómo verificas una restauración exitosa? 6577 6578### 3. Crear Estándares de Configuración 6579 6580La estandarización simplifica la automatización: 6581- Desarrolla convenciones de nomenclatura para todos los objetos 6582- Crea bibliotecas de plantillas para configuraciones comunes 6583- Documenta procedimientos operativos estándar 6584- Aplica consistencia a través de la automatización 6585 6586### 4. Implementar Automatización Progresiva 6587 6588No intentes automatizar todo de una vez: 6589- Comienza con automatización de respaldo para sitios crÃticos 6590- Añade capacidades de restauración después de probar que los respaldos funcionan 6591- Introduce detección de cambios y alertas 6592- Finalmente, implementa análisis predictivo 6593 6594## Historias de Ãxito: Organizaciones Liderando el Camino 6595 6596### Minorista Global Logra 99.99% de Tiempo de Actividad 6597 6598Un minorista Fortune 500 gestionando más de 2,000 ubicaciones transformó sus operaciones: 6599 6600**DesafÃo:** Procesos manuales causando 3-4 interrupciones importantes mensuales 6601**Solución:** Gestión de configuración totalmente automatizada con predicciones impulsadas por IA 6602**Resultados:** 6603- 95% de reducción en incidentes relacionados con configuración 6604- Tiempo de recuperación mejorado de horas a minutos 6605- $2.3 millones de ahorro anual por tiempo de inactividad prevenido 6606- Satisfacción del equipo de TI aumentada en 40% 6607 6608### Red de Salud Asegura Cumplimiento Continuo 6609 6610Una red de salud de 150 sitios automatizó su flujo de trabajo de cumplimiento: 6611 6612**DesafÃo:** Reportes manuales de cumplimiento tomando semanas 6613**Solución:** Seguimiento automatizado de configuración con validación de cumplimiento incorporada 6614**Resultados:** 6615- Dashboards de estado de cumplimiento en tiempo real 6616- Tiempo de preparación de auditorÃa reducido en 85% 6617- Cero violaciones de cumplimiento en 18 meses 6618- Habilitó expansión rápida a nuevas ubicaciones 6619 6620### Firma de Servicios Financieros Previene Desastres 6621 6622Un importante banco previno catástrofes potenciales a través de la automatización: 6623 6624**DesafÃo:** Desviación de configuración causando vulnerabilidades de seguridad 6625**Solución:** Detección de desviaciones impulsada por IA con remediación automática 6626**Resultados:** 6627- 47 incidentes de seguridad potenciales prevenidos 6628- Consistencia de configuración mejorada al 99.8% 6629- Tiempo medio para detectar problemas: Menos de 60 segundos 6630- Reducción de riesgo estimada: $14 millones anuales 6631 6632## El Camino Hacia Adelante: Tu Hoja de Ruta de Automatización 6633 6634### Fase 1: Evaluación (Semanas 1-4) 6635- InventarÃa tu entorno Meraki actual 6636- Documenta los procesos existentes de respaldo y recuperación 6637- Calcula tu exposición actual al riesgo 6638- Construye el caso de negocio para la automatización 6639 6640### Fase 2: Fundamentos (Semanas 5-8) 6641- Selecciona una plataforma de automatización 6642- Implementa automatización básica de respaldos 6643- Establece estándares de configuración 6644- Entrena a tu equipo en nuevos procesos 6645 6646### Fase 3: Mejoras (Semanas 9-12) 6647- Añade detección inteligente de cambios 6648- Implementa pruebas automatizadas de recuperación 6649- Crea reportes de cumplimiento 6650- Introduce análisis predictivo 6651 6652### Fase 4: Optimización (Continua) 6653- Refina la automatización basándote en lecciones aprendidas 6654- Expande la cobertura a todos los sistemas crÃticos 6655- Integra con operaciones de TI más amplias 6656- Mejora continuamente basándote en métricas 6657 6658## Construyendo el Caso de Negocio 6659 6660Al presentar la automatización al liderazgo, enfócate en: 6661 6662**Beneficios Cuantificables:** 6663- Reducción de tiempo de inactividad: mejora tÃpica del 90-95% 6664- Ahorro de mano de obra: más de 40 horas mensuales solo para tareas de respaldo 6665- Costos de cumplimiento: 70% de reducción en preparación de auditorÃas 6666- Mitigación de riesgos: Previene un promedio de 2-3 incidentes importantes anualmente 6667 6668**Ventajas Estratégicas:** 6669- Tiempo más rápido al mercado para nuevos servicios 6670- Postura de seguridad mejorada 6671- Productividad del equipo mejorada 6672- Mejor experiencia del cliente 6673 6674**Cálculo de ROI:** 6675Para una red tÃpica de 500 dispositivos: 6676- Costo anual de gestión manual: $180,000 6677- Costo anual de plataforma de automatización: $60,000 6678- Ahorro por incidentes prevenidos: $1.2 millones 6679- Beneficio anual neto: $1.32 millones 6680- PerÃodo de recuperación: Menos de 60 dÃas 6681 6682## Tendencias Emergentes que Moldean el Futuro 6683 6684### 1. Redes Auto-Reparables 6685Para 2027, los analistas de la industria predicen que el 30% de las redes empresariales se auto-diagnosticarán y repararán problemas de configuración sin intervención humana. 6686
6687### 2. Redes Basadas en Intención 6688Los administradores definirán objetivos de negocio, y la IA generará y mantendrá automáticamente configuraciones óptimas. 6689 6690### 3. Seguridad Resistente a la Cuántica 6691Las organizaciones con visión de futuro ya están implementando encriptación resistente a la cuántica para la gestión de configuración. 6692 6693### 4. TecnologÃa de Gemelo Digital 6694Las réplicas virtuales de red permiten pruebas sin riesgo de cambios de configuración antes del despliegue en producción. 6695 6696## Tomando Acción: Comienza tu Viaje de Automatización 6697 6698La evidencia es clara: la gestión manual de configuración de Meraki es insostenible en las redes modernas. Cada dÃa sin automatización aumenta tu riesgo y costos. 6699 6700**Conclusiones Clave:** 67011. **El riesgo es real:** El 92% de las organizaciones carecen de automatización apropiada 67022. **El impacto es medible:** Los costos de tiempo de inactividad promedian $5,600-$9,000 por minuto 67033. **La solución está comprobada:** Las organizaciones automatizadas ven 95% menos incidentes 67044. **El momento es ahora:** Los adoptadores tempranos ganan ventajas competitivas 6705 6706No esperes a que un desastre de configuración te fuerce la mano. Comienza pequeño, demuestra valor, y escala tus esfuerzos de automatización. Tu redây tu equipoâte lo agradecerán. 6707 6708--- 6709 6710*¿Listo para transformar tu gestión de configuración de Cisco Meraki? Descubre cómo el respaldo y restauración automatizados pueden proteger tu red, asegurar el cumplimiento, y liberar a tu equipo para enfocarse en la innovación en lugar de apagar incendios.* 6711`},{slug:"network-compliance-biggest-concern",title:"Por Qué el Cumplimiento es Ahora la Principal Preocupación en la Gestión de Redes",excerpt:"El 72% de las organizaciones reportan que el cumplimiento ha superado al rendimiento como su principal preocupación. Con multas que alcanzan â¬345 millones y equipos gestionando más de 13 marcos regulatorios, el cumplimiento manual ya no es viable.",date:"2025-06-20",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Cumplimiento",tags:["Compliance","ISO27001","NetworkSecurity","AuditReady","GDPR","SOX"],coverImage:"https://images.unsplash.com/photo-1450101499163-c8848c66ca85?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"9 min",content:` 6712¿Recuerdas cuando el tiempo de actividad de la red era tu mayor preocupación? Esos dÃas se acabaron. En 2025, el 72% de las organizaciones reportan que el cumplimiento ha superado al rendimiento como su principal preocupación de gestión de redes. Con multas regulatorias alcanzando récords históricosâincluyendo una impresionante penalización GDPR de â¬345 millones a principios de 2025âlas apuestas nunca han sido más altas para los equipos de red que gestionan infraestructura Cisco. 6713 6714Esto es lo que mantiene despiertos a los CISOs por la noche: la organización promedio ahora gestiona requisitos de cumplimiento de 13 marcos regulatorios diferentes, mientras que el 63% ya han implementado arquitecturas de confianza cero solo para mantenerse al dÃa con los mandatos en evolución. Si estás gestionando una red Cisco sin capacidades de cumplimiento automatizado, estás esencialmente volando a ciegas en una tormenta de requisitos regulatorios. 6715 6716## La Llamada de Atención de $5 Millones 6717 6718La penalización de $5 millones de la TSA a Colonial Pipeline en 2024 envió ondas de choque a través de la industria. El mensaje fue claro: los fallos de seguridad de red ahora son fallos de cumplimiento, y los reguladores no están jugando. Pero aquà está lo que la mayorÃa de las organizaciones pasan por altoâla multa es solo la punta del iceberg. 6719 6720Considera los costos reales de los fallos de cumplimiento: 6721- **Penalizaciones inmediatas**: Las multas promedio de GDPR aumentaron un 168% año tras año en 2024 6722- **Costos de remediación**: Las organizaciones gastan un promedio de $4.2 millones en remediación de cumplimiento post-incidente 6723- **Negocio perdido**: El 78% de las empresas reportan perder contratos debi
6723do a brechas de cumplimiento 6724- **Fatiga de auditorÃa**: Las verificaciones manuales de cumplimiento consumen 2,800 horas anuales para la empresa promedio 6725 6726Las matemáticas son simples: la prevención a través de la automatización cuesta centavos comparado con los dólares gastados en remediación. 6727 6728## El DesafÃo de Cumplimiento de Cisco: Por Qué los Enfoques Tradicionales Fallan 6729 6730Gestionar el cumplimiento a través de la infraestructura Cisco presenta desafÃos únicos. Ya sea que estés ejecutando DNA Center, ACI, o dispositivos IOS tradicionales, cada plataforma tiene su propia sintaxis de configuración, requisitos de cumplimiento y pistas de auditorÃa. Nuestra investigación muestra que el 84% de los entornos Cisco sufren de desviación de configuración dentro de los 30 dÃas de implementación. 6731 6732Aquà está por qué los enfoques tradicionales de cumplimiento fallan en entornos Cisco: 6733 6734### 1. **Complejidad de Configuración** 6735Un solo switch Cisco Catalyst 9300 puede tener más de 10,000 lÃneas de configuración. Multiplica eso por cientos de dispositivos, y la verificación manual de cumplimiento se vuelve imposible. Las funciones de cumplimiento de DNA Center ayudan, pero están limitadas a dispositivos bajo su gestiónâdejando brechas en entornos hÃbridos. 6736 6737### 2. **Caos Multi-Marco** 6738Las redes Cisco modernas deben satisfacer simultáneamente: 6739- **ISO 27001**: Requiriendo controles de red documentados y auditorÃas regulares 6740- **SOX**: Mandatando control de cambios y separación de funciones 6741- **HIPAA**: Aplicando encriptación y controles de acceso 6742- **PCI DSS**: Demandando segmentación de red y escaneos trimestrales 6743- **Zero Trust**: La nueva lÃnea base que requiere microsegmentación y verificación continua 6744 6745Cada marco interpreta "cumplimiento" de manera diferente, creando una matriz de cumplimiento que marearÃa a un gran maestro de ajedrez. 6746 6747### 3. **La Bomba de Tiempo de AuditorÃa** 6748El análisis de la industria revela que las organizaciones que usan procesos manuales de cumplimiento gastan un 70% más de tiempo en auditorÃas que aquellas con automatización. Durante una auditorÃa tÃpica, los equipos de red se apresuran a: 6749- Generar informes de configuración a través de múltiples plataformas 6750- Probar que no ocurrieron cambios no autorizados 6751- Documentar cada desviación de la lÃnea base 6752- Mapear controles técnicos a requisitos regulatorios 6753 6754Sin automatización, este proceso consume semanas de productividad y aún deja espacio para el error humano. 6755 6756## Los Costos Ocultos de los que Nadie Habla 6757 6758Más allá de las penalizaciones obvias, el incumplimiento crea costos en cascada que los CFOs apenas están comenzando a entender: 6759 6760### **Parálisis de Innovación** 6761Cuando el 58% de los cambios de red se retrasan debido a preocupaciones de cumplimiento, la innovación se detiene. Los equipos se vuelven tan enfocados en mantener el cumplimiento que no pueden implementar mejoras que realmente mejorarÃan la seguridad. 6762 6763### **Acumulación de Deuda Técnica** 6764El miedo a las violaciones de cumplimiento lleva al "acaparamiento de configuración"âmantener reglas y polÃticas obsoletas porque nadie está seguro si eliminarlas podrÃa desencadenar una violación. Esta deuda técnica se acumula con el tiempo, haciendo las redes más difÃciles de gestionar y más vulnerables a ataques. 6765 6766### **Fuga de Talento** 6767Los ingenieros de red no se inscribieron para ser oficiales de cumplimiento. Sin embargo, pasan el 40% de su tiempo en tareas relacionadas con el cumplimiento. ¿El resultado? Agotamiento, rotación, y dificultad para atraer talento de primer nivel que quiere innovar, no documentar. 6768 6769## Ãxito del Mundo Real: Cómo los LÃderes Están Ganando el Juego del Cumplimiento 6770 6771Veamos cómo las organizaciones con visión de futuro están transformando el cumplimiento de una carga a una ventaja competitiva: 6772 6773### **Gigante de Servicios Financieros Reduce Tiempo de AuditorÃa en 85%** 6774Un banco Fortune 500 con más de 2,000 dispositivos Cisco implementó verificación automatizada de cumplimiento en sus entornos DNA Center y ACI. Resultados: 6775- El tiempo de preparación de auditorÃa se redujo de 6 semanas a 1 semana 6776- Violaciones de configuración detectadas y remediadas en tiempo real 6777- $2.3 millones ahorrados anualmente solo en costos de auditorÃa 6778 6779### **Red de Salud Logra Cumplimiento Continuo** 6780Un importante sistema hospitalario que gestiona HIPAA, HITECH, y regulaciones estatales automatizó sus flujos de trabajo de cumplimiento. El impacto: 6781- 100% de visibilidad en cambios de configuración 6782- Cero violaciones de cumplimiento en sus últimas tres auditorÃas 6783- 60% de reducción en incidentes de seguridad debido al cumplimiento proactivo 6784
6785### **Cadena Minorista Domina PCI DSS** 6786Con 500 ubicaciones y estrictos requisitos PCI, este minorista automatizó la verificación de segmentación de red y cumplimiento de configuración. Ahora: 6787- Pasan auditorÃas PCI en la mitad del tiempo 6788- Detectan y remedian violaciones en minutos, no dÃas 6789- Ahorran $800,000 anuales en consultores de cumplimiento 6790 6791## La Ventaja de la Automatización: Tu Plan de Juego de Cumplimiento 6792 6793La evidencia es abrumadora: el 55% de las organizaciones planean invertir en monitoreo de cumplimiento impulsado por IA en 2025. Aquà está tu hoja de ruta para unirte a los ganadores: 6794 6795### **Paso 1: Establecer Visibilidad de LÃnea Base** 6796No puedes gestionar lo que no puedes ver. El cumplimiento moderno comienza con: 6797- Monitoreo de configuración en tiempo real a través de todas las plataformas Cisco 6798- Respaldo automatizado y control de versiones 6799- Detección de cambios con alertas instantáneas 6800 6801### **Paso 2: Implementar PolÃtica como Código** 6802Transforma los requisitos de cumplimiento en verificaciones automatizadas: 6803- Convierte los requisitos regulatorios en polÃticas técnicas 6804- Automatiza la verificación a través de toda tu red 6805- Genera informes listos para auditorÃa bajo demanda 6806 6807### **Paso 3: Habilitar Cumplimiento Continuo** 6808Pasa de auditorÃas periódicas a verificación continua: 6809- Detección y remediación de desviaciones en tiempo real 6810- Puntuación automatizada de cumplimiento 6811- Análisis predictivo para prevenir violaciones antes de que ocurran 6812 6813### **Paso 4: Integrar con Herramientas Existentes** 6814Tu solución de cumplimiento debe mejorar, no reemplazar, tus inversiones en Cisco: 6815- Aprovecha las APIs de DNA Center para gestión unificada 6816- Integra con ACI para cumplimiento del centro de datos 6817- Soporta dispositivos IOS tradicionales sin DNA Center 6818 6819## El ROI del Cumplimiento Automatizado 6820 6821Hablemos de números. Las organizaciones que implementan cumplimiento automatizado reportan: 6822- **250% ROI** en tres años 6823- **70% de reducción** en tareas manuales de cumplimiento 6824- **45% menos** incidentes de seguridad 6825- **30% más rápidos** ciclos de auditorÃa 6826 6827¿Pero el valor real? Tranquilidad. Cuando el cumplimiento está automatizado, tu equipo puede enfocarse en lo que mejor haceâconstruir y optimizar redes que impulsan el valor del negocio. 6828 6829## Mirando Hacia Adelante: Cumplimiento en 2025 y Más Allá 6830 6831El panorama regulatorio no se está desacelerando. Los nuevos requisitos en el horizonte incluyen: 6832 6833### **Reglas de Ciberseguridad de la SEC** 6834Las empresas públicas ahora deben divulgar incidentes de ciberseguridad materiales dentro de 4 dÃas y describir sus prácticas de gestión de riesgos. Los equipos de red necesitan pistas de auditorÃa que prueben su postura de cumplimiento en cualquier momento. 6835 6836### **IA y Cumplimiento de Red** 6837A medida que la gestión de red impulsada por IA se convierte en estándar, los reguladores están desarrollando marcos para "IA explicable" en infraestructura crÃtica. Tus herramientas de cumplimiento necesitan evolucionar en consecuencia. 6838 6839### **Cumplimiento Ambiental** 6840La Directiva de Informes de Sostenibilidad Corporativa de la UE ahora vincula la eficiencia de la red con los informes ESG. Las configuraciones de red energéticamente eficientes no son solo una buena prácticaâse están volviendo obligatorias. 6841 6842## Toma Acción: Tu Transformación de Cumplimiento en 90 DÃas 6843 6844Deja de tratar el cumplimiento como un mal necesario. Aquà está tu plan de acción: 6845 6846**DÃas 1-30: Evaluar y Establecer LÃnea Base** 6847- InventarÃa todos los dispositivos Cisco y sus requisitos de cumplimiento 6848- Identifica la desviación de configuración y las violaciones de polÃticas 6849- Calcula tus costos actuales de cumplimiento 6850 6851**DÃas 31-60: Implementar Victorias Rápidas** 6852- Despliega respaldo automatizado y monitoreo de configuración 6853- Crea plantillas de cumplimiento para requisitos comunes 6854- Automatiza tus verificaciones manuales más dolorosas 6855 6856**DÃas 61-90: Escalar y Optimizar** 6857- Extiende la automatización a toda tu infraestructura 6858- Integra el cumplimiento en tu proceso de gestión de cambios 6859- Genera tu primer informe de auditorÃa automatizado 6860 6861## La Conclusión 6862 6863El cumplimiento ha evolucionado de un ejercicio de casillas de verificación a un imperativo estratég
6863ico. Las organizaciones que adoptan el cumplimiento automatizado ganan más que aprobación regulatoriaâganan eficiencia operativa, riesgo reducido, y la libertad de innovar. 6864 6865La pregunta no es si automatizarás el cumplimientoâes si lo harás antes o después de tu próxima auditorÃa. Con las penalizaciones regulatorias disparándose y el ROI de la automatización comprobado, la elección es clara. 6866 6867¿Listo para transformar el cumplimiento de tu red Cisco de una carga a una ventaja competitiva? Las herramientas existen. El ROI está comprobado. Lo único que falta es tu decisión de actuar. 6868`},{slug:"true-cost-of-network-configuration-loss",title:"El Verdadero Costo de Perder la Configuración de Red: Por Qué la Recuperación Manual Ya No es Viable",excerpt:"En 2025, el 67,7% de las empresas experimentaron pérdidas significativas de datos. Cuando las configuraciones de red fallan a $9,000/minuto, la recuperación manual no solo está obsoletaâes financieramente irresponsable.",date:"2025-05-15",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Mejores Prácticas",tags:["NetworkManagement","DisasterRecovery","CiscoMeraki","BusinessContinuity"],coverImage:"https://images.unsplash.com/photo-1451187580459-43490279c0fa?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"7 min",content:` 6869Imagina esto: Son las 2:48 AM. Tu teléfono vibra con una alerta urgente. Un switch crÃtico ha fallado, dejando fuera de servicio la mitad de tu red. Tu equipo se apresura a encontrar la última configuración funcional mientras los tickets de soporte llegan a $9,000 por minuto. ¿Te suena familiar? 6870 6871No estás solo. En 2025, **el 67,7% de las empresas experimentaron pérdidas significativas de datos**, siendo las configuraciones de red incorrectas la principal causa. ¿El viejo manual de recuperación manual? No solo está obsoletoâes financieramente irresponsable. 6872 6873## La Llamada de Atención de $5,4 Mil Millones 6874 6875Los números no mienten, y están empeorando. Cuando el error de configuración de CrowdStrike derribó sistemas en todo el mund
6875o en julio de 2024, le costó a las empresas Fortune 500 **$5,4 mil millones en solo 19 horas**. Pero aquà está lo importante: ese fue solo un incidente. 6876 6877Considera estas estadÃsticas alarmantes de 2025: 6878 6879- **El 51% de las organizaciones** ahora reportan pérdidas mensuales que superan $1 millón debido a interrupciones de red 6880- El costo promedio del tiempo de inactividad de TI ha subido a **$9,000 por minuto** (eso es $540,000 por hora) 6881- **El 86% de los incidentes** implican una interrupción significativa del negocio más allá del simple tiempo de inactividad 6882- Los tiempos de recuperación para problemas relacionados con la configuración promedian **22 dÃas** cuando se hacen manualmente 6883 6884Y aquà está lo realmente impactante: **el 93% de las empresas** que experimentan pérdida prolongada de datos quiebran. Deja que eso se asiente. 6885 6886## El Efecto Multiplicador Oculto 6887 6888Cuando el resolver DNS 1.1.1.1 de Cloudflare se apagó durante 62 minutos en julio de 2025 debido a un error de configuración que habÃa estado latente durante 38 dÃas, no se trataba solo de consultas DNS perdidas. Para millones de usuarios, Internet efectivamente desapareció. 6889 6890Este fallo en cascada ilustra un punto crucial: la pérdida de configuración no solo impacta tu redâcrea un efecto dominó que multiplica los costos exponencialmente: 6891 6892**Costos Directos:** 6893- Pérdida de ingresos: $5,600-$9,000 por minuto (promedio de la industria) 6894- Soporte de TI de emergencia: $300-$500 por hora por técnico 6895- Reemplazo de hardware: $10,000-$50,000 por dispositivo 6896 6897**Costos Ocultos:** 6898- Tiempo de inactividad de empleados: $0.67 por minuto por empleado afectado 6899- Pérdida de clientes: 32% de los clientes cambian de proveedor después de interrupciones importantes 6900- Multas por incumplimiento: Hasta $50 millones por violaciones regulatorias 6901- Daño reputacional: 73% de las empresas reportan impacto duradero en la marca 6902 6903## Por Qué los Métodos de Recuperación Manual Están Fallando 6904 6905¿Recuerdas cuando mantener respaldos de configuración en hojas de cálculo e hilos de correo electrónico parecÃa razonable? Esos dÃas se acabaron. Aquà está por qué los enfoques tradicionales se están desmoronando: 6906 6907### 1. **La Explosión de Complejidad** 6908Las infraestructuras Cisco modernas no son las redes de tu padre. Los entornos actuales presentan: 6909- 10 veces más dispositivos que hace una década 6910- Integraciones multi-proveedor que requieren conocimiento especializado 6911- Arquitecturas hÃbridas en la nube con configuraciones dinámicas 6912- Sistemas automatizados que cambian configuraciones cientos de veces al dÃa 6913 6914¿Seguimiento manual? Imposible. 6915 6916### 2. **La Brecha de Velocidad de Recuperación** 6917En casi **uno de cada cinco casos**, la exfiltración de datos ocurre dentro de la primera hora del compromiso. Pero la recuperación manual tÃpicamente implica: 6918- 2-4 horas para localizar el respaldo correcto 6919- 3-6 horas para verificar la integridad de la configuración 6920- 4-8 horas para implementar y probar la recuperación 6921- 24-48 horas para la restauración completa del servicio 6922 6923Eso es una ventana mÃnima de recuperación de 9 horas cuando cada minuto cuesta miles. 6924 6925### 3. **El Factor de Error Humano** 6926La investigación de la industria muestra que **más del 80% de los problemas de red** provienen de configuración incorrecta y problemas de gestión de cambios. Cuando estás recuperando configuraciones manualmente a las 3 AM bajo presión, las tasas de error se disparan: 6927- 65% de probabilidad de introducir nuevas configuraciones incorrectas 6928- 40% de probabilidad de omitir dependencias crÃticas 6929- 28% de probabilidad de problemas de incompatibilidad de versiones 6930 6931## Desastres de Configuración del Mundo Real: Aprendiendo de los CaÃdos 6932 6933**Caso de Estudio 1: La Bomba de Tiempo Latente** 6934Cuando un error de configuración de un importante proveedor de CDN permaneció sin detectar durante 38 dÃas antes de desencadenar una interrupción global, destacó una vulnerabilidad crÃtica: las configuraciones heredadas pueden esconderse como minas terrestres en tu red. ¿El resultado? 70 paÃses afectados, millones en pérdidas, y un duro re
6934cordatorio de que la gestión manual de configuraciones es jugar con fuego. 6935 6936**Caso de Estudio 2: El Efecto Cascada** 6937Una empresa de salud Fortune 500 aprendió esta lección de la manera difÃcil. Una sola ruta BGP mal configurada se filtró hacia arriba, propagándose a través de su proveedor de servicios y afectando a más de 300 redes. Tiempo de recuperación: 31 horas. Costo: $14.2 millones. Causa: Sin validación automatizada de configuración. 6938 6939## La Ventaja de la Automatización: De Horas a Minutos 6940 6941Aquà es donde el juego cambia. Las soluciones modernas de respaldo y recuperación automatizada de configuraciones transforman los escenarios de desastre en contratiempos menores: 6942 6943**Recuperación Manual Tradicional:** 6944- Tiempo de detección: 45-90 minutos 6945- Inicio de recuperación: 2-4 horas 6946- Restauración completa: 24-72 horas 6947- Tasa de éxito: 68% 6948 6949**Recuperación Automatizada:** 6950- Tiempo de detección: <1 minuto 6951- Inicio de recuperación: 5-15 minutos 6952- Restauración completa: 30-120 minutos 6953- Tasa de éxito: 97% 6954 6955Las matemáticas son simples: la automatización reduce el tiempo de recuperación en un 92% mientras aumenta las tasas de éxito en un 43%. 6956 6957## Construyendo tu Estrategia de Resiliencia de Configuración 6958 6959Las organizaciones inteligentes están implementando tres estrategias clave: 6960 6961### 1. **Captura Continua de Configuración**
6962- Respaldo en tiempo real de cada cambio de configuración 6963- Control de versiones con capacidades de reversión granular 6964- Detección y alertas automatizadas de cambios 6965 6966### 2. **Orquestación Inteligente de Recuperación** 6967- Restauración con un clic a cualquier punto en el tiempo 6968- Mapeo automatizado de dependencias 6969- Escenarios de recuperación pre-validados 6970 6971### 3. **Gobernanza Proactiva de Configuración** 6972- Verificación de cumplimiento contra mejores prácticas 6973- Detección y remediación de desviaciones 6974- Generación automatizada de documentación 6975 6976## El ROI es Innegable 6977 6978Hablemos de números. Para una empresa mediana con 500 dispositivos de red: 6979 6980**Costos Anuales de Gestión Manual:** 6981- Seguimiento de configuración: $180,000 (3 FTEs) 6982- Costos promedio de tiempo de inactividad: $2.4 millones (4 incidentes importantes) 6983- Preparación de auditorÃa de cumplimiento: $75,000 6984- **Total: $2,655,000** 6985 6986**Costos Anuales de Solución Automatizada:** 6987- Licenciamiento de plataforma: $120,000 6988- Costos reducidos de tiempo de inactividad: $240,000 (reducción del 90%) 6989- Automatización de cumplimiento: $15,000 6990- **Total: $375,000** 6991 6992**Ahorro Anual Neto: $2,280,000** 6993**ROI: 760%** 6994**PerÃodo de Recuperación: 1.6 meses** 6995 6996## Tus Próximas 48 Horas: Un Plan de Acción 6997 6998El reloj está corriendo. Aquà está tu hoja de ruta hacia la resiliencia de configuración: 6999 7000**Hora 1-4:** Audita tu proceso actual de gestión de configuración. Documenta cada brecha. 7001 7002**Hora 5-12:** Calcula tus costos reales de tiempo de inactividad usando esta fórmula: 7003- (Ingresos Anuales ÷ 525,600 minutos) à Tiempo Promedio de Recuperación à Número de Incidentes 7004 7005**Hora 13-24:** Evalúa soluciones de respaldo automatizado contra estos criterios: 7006- Capacidades de captura en tiempo real 7007- Profundidad de integración nativa con Cisco 7008- Objetivos de tiempo de recuperación 7009- CaracterÃsticas de informes de cumplimiento 7010 7011**Hora 25-48:** Implementa una prueba de concepto enfocándote en tus dispositivos más crÃticos. 7012 7013## El Futuro es Automatizado (Estés Listo o No) 7014 7015A medida que avanzamos más profundamente en 2025, la brecha entre las organizaciones con gestión automatizada de configuración y aquellas sin ella se convertirá en un abismo. Con el 70% de los incidentes de seguridad ahora dirigidos a múltiples superficies de ataque simultáneamente, la recuperación manual no solo es lentaâes una responsabilidad. 7016 7017La pregunta no es si automatizarás tu respaldo y recuperación de configuración. Es si lo harás antes o después de tu próxima interrupción importante. 7018 7019Recuerda: En un mundo donde cada minuto de inactividad cuesta $9,000, la solución de respaldo más cara es la que no tienes cuando la necesitas. Y en el panorama de amenazas actual, ese momento está más cerca de lo que piensas. 7020 7021--- 7022 7023*¿Listo para transformar tu gestión de configuración de red de una vulnerabilidad a una ventaja competitiva? El tiempo de las medidas a medias ha pasado. Tu redây tu negocioâmerecen algo mejor que la recuperación manual en un mundo automatizado.* 7024`}],pt:[{slug:"what-weve-built-since-three-products-one-mission",title:"O Que ConstruÃmos Desde Então: Três Produtos, Uma Missão",excerpt:"Há alguns meses afirmamos que a IA poderia construir qualquer coisa sobre redes Cisco. Desde então ficamos de cabeça baixa, conversando com equipes de rede, MSPs e lÃderes de TI corporativa, e transformando o que ouvimos em produtos. Esta é a atualização: Config Backup & Restore, o Agente de Conformidade e o Selent MCP, agora open source.",date:"2026-09-18",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Produto",tags:["Cisco Meraki","Backup de Configuração","Conformidade","Selent MCP","Open Source","Agentes de IA","Automação de Redes","MSP"],coverImage:"https://images.unsplash.com/photo-1519389950473-47ba0277781c?ixlib=rb-4.0.3&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"4 min",content:` 7025Há alguns meses fizemos uma afirmação ousada: a de que a [AI](https://pento.ai) poderia construir qualquer coisa s
7025obre redes Cisco. Depois explicamos por que sua rede já tem as respostas, e como nosso motor transforma essa promessa em soluções que funcionam. 7026 7027Desde então ficamos de cabeça baixa. Passamos esse tempo conversando com equipes de rede, MSPs e lÃderes de TI corporativa, e transformando o que ouvimos em produtos. Este post é a atualização. 7028 7029## O que ouvimos repetidamente 7030 7031As conversas voltavam sempre à s mesmas frustrações. 7032 7033As equipes de rede que operam Cisco Meraki nos disseram que algumas das tarefas operacionais mais crÃticas ainda não têm resposta nativa. Fazer backup e restaurar configurações é um exemplo. Replicar uma configuração comprovada em novos sites é outro. 7034 7035Os lÃderes de TI nos disseram que a conformidade continua sendo um exercÃcio de emergência trimestral. Alguém audita as configurações à mão, escreve um relatório e recomeça três meses depois. 7036 7037Engenheiros e SEs nos disseram que querem falar com a infraestrutura em linguagem natural, sem escrever um novo script para cada pergunta. 7038 7039São três problemas diferentes, e construÃmos um produto para cada um. 7040 7041--- 7042 7043## Produto 01 â Config Backup & Restore, com IA 7044 7045A configuração é a memória da sua rede. Quando uma mudança dá errado, quando um dispositivo falha ou quando um site precisa ser reconstruÃdo, você precisa que essa memória esteja completa e recuperável. 7046 7047O Selent Config Backup & Restore captura suas configurações Meraki e permite reverter com confiança. E vai além da recuperação: 7048 7049**Clonagem de redes** â pegue uma configuração que funciona e replique-a em novos sites. Você não precisa reconstruÃ-la à mão. 7050 7051**Implantação em massa de switches** â provisione switches em escala a partir de uma linha de base confiável, em uma fração do tempo. 7052 7053Para organizações que crescem em muitas localidades, isso muda a forma como novos sites entram em operação. Cada um começa a partir de um padrão comprovado, então ninguém precisa reinventá-lo. 7054 7055--- 7056 7057## Produto 02 â O Agente de Conformidade 7058 7059Nossa primeira IA Agêntica Especializada agora é um produto por si só. 7060 7061O Agente de Conformidade da Selent analisa as configurações da sua rede em relação aos padrões que sua organização precisa atender, como PCI DSS, polÃticas internas de segurança e regras de governança próprias. Ele diz se o seu ambiente está em conformidade, mostra onde não está e explica o que corrigir. 7062 7063A mudança é de periódico para persistente. A conformidade deixa de ser o projeto que sua equipe teme a cada trimestre e passa a ser uma camada que continua trabalhando em segundo plano. Quando os auditores chegam, as respostas já estão lá. 7064 7065--- 7066 7067## Produto 03 â Selent MCP, agora open source 7068 7069O Selent MCP conecta a IA à sua infraestrutura Cisco Meraki. Ele expõe dinamicamente mais de 400 endpoints da API Meraki por meio de linguagem natural. 7070 7071Funciona com os clientes de IA que as equipes já usam, incluindo Claude, ChatGPT e Cisco AI Assistant. E lançamos uma versão open source para a comunidade de engenheiros de rede, SEs e desenvolvedores que constroem sobre Meraki. 7072 7073Acreditamos que o ecossistema fica mais forte quando quem constrói tem ferramentas melhores. Abrir o MCP é nossa contribuição para isso. 7074 7075--- 7076 7077## O que não mudou 7078 7079Esses três produtos nascem da mesma ideia com que começamos: 7080 7081> **Cada rede é diferente, e a IA que a opera também deveria ser.** 7082 7083Os produtos resolvem os problemas que vimos repetidamente. O desenvolvimento sob medida continua sendo o centro do que fazemos. Quando sua equipe precisa de algo que nenhum produto cobre, como uma integração especÃfica, um dashboard, um fluxo de trabalho ou uma automação, nós construÃmos para o seu ambiente, o seu setor e a sua escala. 7084 7085## ConstruÃdo dentro do ecossistema Cisco 7086 7087A Selent é Cisco Technology Partner e está listada no Cisco Marketplace. Tudo o que construÃmos roda sobre a infraestrutura Cisco na qual você já confia, e é projetado para estender essa infraestrutura, não para substituÃ-la. 7088 7089## O que vem a seguir 7090 7091Nas próximas semanas vamos aprofundar cada produto. Veremos como o Agente de Conformidade funciona na prática, por que o backup de configuração é um risco maior do que a maioria das equipes imagina, e como os MSPs estão escalando operações com a Selent. Também vamos compartilhar casos de uso por setor. 7092 7093Se algum desses problemas soa familiar, gostarÃamos de ouvir você. 7094 7095--- 7096 7097*Saiba mais em [selent.ai](https://www.selent.ai) ou encontre-nos no [Cisco Marketplace](https://marketplace.cisco.com).* 7098`},{slug:"ia-redes-sua-rede-ja-tem-todas-as-respostas",title:"IA + Redes: Sua rede já tem todas as respostas. Você só precisa perguntar.",excerpt:"A maioria das empresas investiu milhões construindo sua infraestrutura Cisco, e então parou. Os dados já estão lá. A inteligência já está lá. A única coisa que falta é construir sobre ela.",date:"2026-03-17",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"AI Development",tags:["IA","Cisco","Automação de Redes","Desenvolvimento Personalizado","Redes Empresariais","Cisco Meraki","Transformação Digital","Serviços Gerenciados"],coverImage:"https://images.unsplash.com/photo-1558494949-ef010cbdcc31?ixlib=rb-4.0.3&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"5 min",content:` 7099A maioria das empresas investiu milhões construindo sua infraestrutura Cisco. E então parou. Elas a administram, gerenciam, fazem patches. Mas nunca constroem sobre ela. 7100 7101à aà que seus concorrentes estão prestes a deixá-la para trás. 7102 7103## A pergunta que ninguém faz 7104 7105Há uma verdade desconfortável em toda sala de diretoria corporativa. O CTO apresenta o orçamento de rede. O CISO apresenta a postura de conformidade. O CFO analisa os números. E em algum ponto dessa conversa, ninguém faz a pergunta que mais importa: 7106 7107*"O que nossa rede está realmente nos dizendo, e o que ela poderia fazer se a deixássemos?"* 7108 7109Sua infraestrutura Cisco gera dados a cada segundo. Padrões de tráfego, comportamento de dispositivos, anomalias, sinais de desempenho, eventos de segurança, uso por localização, por usuário, por aplicação. Em todo sentido significativo, é um dos sistemas mais ricos em informações da sua organização. 7110 7111E na maioria das empresas, essa inteligência não vai a lugar nenhum. Alimenta um dashboard que ninguém lê. Dispara alertas que ninguém age. Fica em logs que são rotacionados e esquecidos. 7112 7113Este não é um problema de tecnologia. à um problema de construção. 7114 7115## Sua rede é uma plataforma. Comece a construir sobre ela. 7116 7117As ferramentas genéricas de gerenciamento de rede foram criadas para a empresa média. Sua empresa não é média. Seus requisitos de conformidade, seus fluxos de trabalho operacionais, suas regulamentações do setor, sua postura de segurança, nada disso é médio. Então por que você está usando software genérico em uma infraestrutura sofisticada? 7118 7119Os lÃderes de TI e operações mais avançados estão fazendo uma aposta diferente. Em vez de esperar que um fornecedor lance um recurso que quase atende à sua necessidade, eles estão encomendando soluções personalizadas construÃdas diretamente sobre sua infraestrutura Cisco, soluções que falam seu idioma, automatizam seus fluxos de trabalho reais e integram os sistemas que já usam. 7120 7121Não são implementações de ERP de 18 meses. São construções direcionadas: 7122 7123- Um script de automação que elimina uma tarefa manual que custa a um engenheiro duas horas por semana 7124- Um dashboard de conformidade que mostra ao auditor exatamente o que precisam, em tempo real, sem exportações manuais 7125- Uma ferramenta de monitoramento que aprende como é o normal no seu ambiente e sinaliza anomalias antes que seus clientes as percebam 7126 7127## O que é construÃdo parece diferente para cada setor 7128 7129O padrão é consistente em todos os setores: há um fluxo de trabalho que é manual, lento ou invisÃvel. Os dados para corrigi-lo já existem dentro da rede. O que faltava era a construção. 7130 7131**Saúde:** Monitoramento de conformidade de dispositivos em tempo real em redes clÃnicas, sinalizando automaticamente dispositivos não autorizados antes que uma auditoria HIPAA o faça. 7132
7133**Varejo e Hospitalidade:** Dashboards de análise de Wi-Fi para visitantes alimentando dados de tráfego de pessoas diretamente na tomada de decisões de marketing e operações. 7134 7135**Serviços Financeiros:** UIs de controle de segmentação de rede personalizadas que permitem à s equipes de conformidade aplicar polÃticas sem tocar na CLI. 7136 7137**Manufatura:** Monitoramento de convergência OT/IT, conectando a visibilidade de tecnologia operacional aos planos de controle de rede para manutenção preditiva. 7138 7139**Serviços Gerenciados:** Frameworks de automação multi-tenant que permitem a MSPs provisionar, configurar e reportar sobre ambientes de clientes em minutos, não horas. 7140 7141**Educação:** Análises de largura de banda por prédio e por andar ajudando as operações do campus a entender a utilização e planejar investimentos em infraestrutura. 7142 7143Cada uma dessas soluções foi construÃda sobre dados que já existiam. A infraestrutura já estava gerando os sinais. A única peça que faltava era uma equipe disposta a construir. 7144 7145## Agentes de IA e especialistas em Cisco. Juntos. 7146 7147A Selent.AI foi construÃda exatamente para este momento. Combinamos desenvolvimento impulsionado por IA com profunda expertise em redes Cisco para construir soluções personalizadas sobre sua infraestrutura existente, rápido, preciso e calibrado ao seu ambiente. 7148 7149Isso não é IA como um truque. Agentes de IA lidam com a iteração, a geração de código, o reconhecimento de padrões nos dados da sua rede. Especialistas humanos em Cisco lidam com as decisões de arquitetura, os casos extremos, as integrações que requerem julgamento que nenhum modelo pode substituir. O resultado é uma capacidade de desenvolvimento que se move na velocidade da IA com a confiabilidade da expertise certificada. 7150 7151**Como funciona:** 7152 7153**01. Começamos com sua dor operacional especÃfica.** Não um template de caso de uso genérico, não um roadmap de fornecedor. Seu problema real. 7154 7155**02. Projetamos uma solução que fica sobre sua infraestrutura Cisco,** Meraki, Catalyst, ou ambas, e integra com suas ferramentas existentes. 7156 7157**03. Nós a construÃmos.** Scripts de automação, dashboards de análise, UIs de controle, ferramentas de conformidade, sistemas de monitoramento, integrações com terceiros. O que o problema exigir. 7158 7159**04. à sua.** Não é uma assinatura SaaS com um modelo de preços opaco e um roadmap de recursos que você não pode influenciar. à sua. 7160 7161## As empresas que lideram são as que constroem 7162 7163As empresas que definirão seus setores nos próximos cinco anos não são as que têm os maiores orçamentos ou os contratos de fornecedores mais sofisticados. São as que pararam de esperar que o produto certo aparecesse em um roadmap, e começaram a construir sobre a infraestrutura que já têm. 7164 7165Sua rede Cisco não é apenas um centro de custo. à uma plataforma. Está gerando dados que sua equipe de operações precisa, que sua equipe de conformidade precisa, que seus clientes precisam, que sua liderança precisa. 7166 7167Os dados já estão lá. A inteligência já está lá. A única coisa que falta é a construção. 7168 7169Sua rede está pronta. A única pergunta é se você está. 7170 7171--- 7172 7173*Conte-nos o problema. Nós construÃmos a solução. Compartilhe com o que você está trabalhando, seu ambiente, seu desafio, seu objetivo, e nossa equipe responderá com uma proposta concreta do que poderia ser uma construção personalizada sobre sua infraestrutura Cisco. [selent.ai](https://www.selent.ai)* 7174`},{slug:"network-scaling-operations-model-cisco-meraki",title:"Sua Rede Esta Escalando, Seu Modelo de Operacoes Escala Junto?",excerpt:"As redes empresariais crescem mais rapido do que nunca com mais filiais, aplicacoes em nuvem e dispositivos IoT. Mas a maioria dos modelos de operacoes nao acompanhou esse ritmo. Descubra por que a inteligencia operacional e a chave para escalar ambientes Cisco Meraki com confianca.",date:"2026-02-13",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Operacoes de Rede",tags:["Cisco Meraki","Network Scaling","AIOps","Configuration Management","Compliance","Network Automation","Enterprise IT","Operational Intelligence"],coverImage:"https://images.unsplash.com/photo-1451187580459-43490279c0fa?ixlib=rb-4.0.3&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"3 min",content:` 7175Nos ultimos cinco anos, as redes empresariais se transformaram. Mais filiais. Mais aplicacoes em nuvem. Mais usuarios remotos. Mais dispositivos IoT. Mais mudancas constantes de configuracao. 7176 7177Mas aqui esta a verdade desconfortavel: **a maioria dos modelos de operacoes de rede nao evoluiu no mesmo ritmo.** 7178 7179## O Verdadeiro Gargalo Nao E o Hardware, Sao as Operacoes 7180 7181Cisco Meraki torna a implantacao de redes mais facil do que nunca. Voce pode implementar: 7182 7183- Novas filiais em horas 7184- SD-WAN em multiplas regioes 7185- Wi-Fi seguro em centenas de sites 7186 7187Mas a maturidade operacional e onde muitas organizacoes ficam para tras. Perguntas que ouvimos com frequencia: 7188 7189- Quem aprovou essa mudanca de configuracao? 7190- Quando foi feito o ultimo backup? 7191- Por que este site parece diferente do template padrao?
7192- Podemos restaurar a versao funcional da semana passada, agora mesmo? 7193 7194Quando o crescimento acelera, processos manuais se tornam riscos invisiveis. 7195 7196## A Velocidade de Mudanca E a Nova Superficie de Risco 7197 7198Redes modernas nao apenas crescem, elas mudam constantemente. Regras de firewall sao atualizadas, VLANs sao modificadas, SSIDs sao ajustados, pares VPN sao adicionados e permissoes de administrador evoluem. 7199 7200Cada mudanca aumenta a entropia. Sem visibilidade automatizada e barreiras de protecao, **o drift de configuracao se torna inevitavel.** 7201 7202E o drift leva a: 7203 7204- **Brechas de seguranca** que expoem a organizacao a ameacas 7205- **Exposicao regulatoria** em multiplos frameworks de conformidade 7206- **Desempenho inconsistente** entre sites 7207- **Interrupcoes dificeis de diagnosticar** que consomem tempo de engenharia 7208 7209O problema nao e a mudanca. O problema e a mudanca nao gerenciada. 7210 7211## Inteligencia Operacional Acima da Supervisao Manual 7212 7213Nenhuma equipe, por mais talentosa que seja, consegue rastrear manualmente cada mudanca de configuracao em dezenas ou centenas de sites. O que se requer e inteligencia operacional: 7214 7215- **Snapshots de configuracao automatizados** capturados continuamente 7216- **Deteccao continua de drift** em todas as redes gerenciadas 7217- **Auditoria estruturada de mudancas** com trilhas completas de responsabilidade 7218- **Capacidades de rollback instantaneo** para qualquer estado anterior conhecido 7219- **Comparacao historica entre versoes** para analise de causa raiz 7220- **Validacao de politicas em escala** para aplicar baselines de conformidade 7221 7222E aqui que o AIOps moderno passa de "bom ter" para infraestrutura fundamental. 7223 7224## Escalando Ambientes Cisco Meraki Com Confianca 7225 7226Selent foi projetado para ajudar organizacoes baseadas em Cisco Meraki a operar com confianca em escala. 7227 7228A medida que sua rede cresce, Selent garante: 7229 7230- **Cada configuracao e continuamente respaldada**, sem intervencao manual necessaria 7231- **Cada mudanca e rastreada**, fornecendo trilhas de auditoria completas para conformidade e resolucao de problemas 7232- **Cada desvio e visivel**, para que o drift nunca passe despercebido 7233- **Cada restauracao pode acontecer em segundos**, minimizando o tempo de inatividade quando problemas surgem 7234 7235Nao porque algo falhou, mas porque operacoes maduras antecipam a complexidade antes que ela se torne um problema. 7236 7237## O Novo Padrao para Lideranca em Redes 7238 7239Lideres de TI com visao de futuro estao mudando sua mentalidade: 7240 7241- De **resolucao reativa de problemas** para **resiliencia proativa** 7242- De **controle manual** para **governanca automatizada** 7243- De **lacunas de visibilidade** para **inteligencia operacional continua** 7244 7245O futuro das operacoes de rede nao e apenas hardware mais rapido. E supervisao mais inteligente, impulsionada por automacao inteligente que escala junto com sua infraestrutura. 7246 7247## Reflexao Final 7248 7249Se seu ambiente Cisco Meraki esta em expansao, seu modelo operacional deve evoluir com ele. Escalar infraestrutura sem escalar inteligencia operacional e construir velocidade sem controle. 7250 7251Selent ajuda equipes de rede modernas a operar no ritmo do crescimento, sem sacrificar estabilidade, seguranca ou conformidade. 7252`},{slug:"protect-your-cisco-meraki-networks-before-its-too-late",title:"Proteja suas Redes Cisco Meraki Antes que Seja Tarde Demais",excerpt:"Um pequeno erro não deveria derrubar toda a sua rede. Em redes modernas gerenciadas na nuvem, um clique pode mudar tudo. Descubra por que a má configuração é a principal causa de downtime e como proteger sua infraestrutura.",date:"2026-02-03",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Operações de Rede",tags:["Cisco Meraki","Gerenciamento de Configuração","Recuperação de Desastres","Backup e Restauração","Segurança de Rede","MSP","TI Empresarial"],coverImage:"https://images.unsplash.com/photo-1558494949-ef010cbdcc31?ixlib=rb-4.0.3&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"4 min",content:` 7253**Um pequeno erro não deveria derrubar toda a sua rede.** 7254 7255Em redes modernas gerenciadas na nuvem, um clique pode mudar tudo. 7256 7257Uma edição de VLAN. Uma atualização de regra de firewall. Um push de template para centenas de sites. 7258 7259E de repente: 7260 7261- Lojas perdem conectividade 7262- APs ficam offline 7263- VPNs quebram 7264- Equipes não conseguem processar pagamentos ou acessar sistemas 7265 7266Se você gerencia infraestrutura distribuÃda â filiais de varejo, campi, clÃnicas, armazéns ou clientes gerenciados por MSP â você já sabe: 7267 7268**O downtime não vem mais de falhas de hardware. Vem de má configuração.** 7269 7270à exatamente por isso que construÃmos a Selent. 7271 7272## O Risco Oculto nas Redes Gerenciadas na Nuvem 7273 7274Plataformas gerenciadas na nuvem como o Meraki são incrivelmente poderosas. Mas esse poder também aumenta o raio de impacto. 7275 7276Quando você: 7277 7278- Aplica templates 7279- Edita polÃticas em massa 7280- Automatiza mudanças 7281- Gerencia centenas ou milhares de dispositivos 7282
7283Uma única mudança errada pode se propagar para todos os lugares em segundos. 7284 7285E aqui está a verdade desconfortável: 7286 7287**O Meraki não fornece restauração instantânea, completa e point-in-time de configuração nativamente.** 7288 7289Então as equipes acabam: 7290 7291- Reconstruindo configurações manualmente 7292- Procurando nos logs de mudanças 7293- Copiando configurações de memória 7294- Abrindo casos de suporte urgentes 7295 7296Tudo isso enquanto o negócio está parado. 7297 7298## O Que Realmente Causa a Maioria das Interrupções? 7299 7300Pelo que vemos em MSPs e equipes de TI empresarial, os incidentes geralmente vêm de: 7301 7302### 1. Erro Humano 7303 7304- VLAN errada 7305- Template errado 7306- Rede errada selecionada 7307- Momento errado 7308 7309### 2. Mudanças Não Rastreadas 7310 7311- Ninguém sabe quem mudou o quê 7312- Sem linha de base 7313- Sem trilha de auditoria 7314- Sem rollback 7315 7316### 3. Sem Recuperação Rápida 7317 7318Mesmo se você conhece o problema, restaurar requer: 7319 7320- Capturas de tela 7321- Exportações 7322- Reconstruções manuais 7323- Horas de esforço 7324 7325**Minutos de erro â horas de downtime.** 7326 7327## A Forma Mais Segura de Operar o Meraki 7328 7329A Selent foi construÃda especificamente para proteger as operações do Meraki deste problema exato. 7330 7331Com a Selent você obtém: 7332 7333### Backups Automatizados 7334 7335Snapshots contÃnuos e agendados de: 7336 7337- Redes 7338- Dispositivos 7339- PolÃticas 7340- Templates 7341- Configurações a nÃvel de organização 7342 7343Sempre prontos. Sem exportações manuais. 7344 7345### Auditoria de Mudanças 7346 7347Saiba exatamente: 7348 7349- O que mudou 7350- Quem mudou 7351- Quando mudou 7352- Qual era o valor anterior 7353 7354Perfeito para troubleshooting e conformidade. 7355 7356### Restauração com Um Clique 7357 7358Quebrou algo? Reverta instantaneamente. 7359 7360Não horas. **Segundos.** 7361 7362### Operações Mais Seguras em Escala 7363 7364Aplique mudanças com confiança em: 7365 7366- Centenas de lojas 7367- Campi 7368- Filiais distribuÃdas 7369- Clientes MSP 7370 7371Porque o rollback está sempre disponÃvel. 7372 7373## Cenários do Mundo Real que Protegemos 7374 7375**Rede de varejo** 7376O push de template quebra a conectividade do POS â Restaure o último estado bom conhecido em segundos. 7377 7378**MSP gerenciando 50+ clientes** 7379Engenheiro aplica regra de firewall errada â Rollback apenas daquela rede instantaneamente. 7380 7381**TI Empresarial** 7382Solicitação de auditoria de "quem mudou a polÃtica de segurança?" â Histórico completo de mudanças disponÃvel. 7383 7384**Equipes de conformidade** 7385Precisam de prova de controle de configuração â Logs automáticos + backups. 7386 7387## O Custo de Esperar 7388 7389A maioria das equipes pensa: *"Vamos configurar os backups depois."* 7390 7391Até o dia em que: 7392 7393- Um engenheiro júnior aplica o template errado 7394- Uma mudança noturna dá errado 7395- Ou um atacante modifica as configurações 7396 7397E a recuperação leva horas. 7398 7399**Se cada hora de downtime custa milhares (ou milhões), por que arriscar?** 7400 7401Backups e restauração rápida não deveriam ser opcionais. Deveriam ser padrão. 7402 7403## Reflexão Final 7404 7405Sua rede agora é software. E software precisa de controle de versão e rollback. Assim como código. 7406 7407Se você não colocaria software em produção sem backups e histórico do Git⦠7408 7409**Por que fazer isso com sua rede?** 7410 7411--- 7412 7413## Proteja seu Meraki Antes do Próximo Erro 7414 7415A Selent te dá: 7416 7417- Backup 7418- Auditoria 7419- Restauração 7420- Confiança 7421 7422Para que uma pequena mudança nunca se torne uma grande interrupção. 7423 7424Saiba mais ou solicite uma demo em [selent.ai](https://www.selent.ai) 7425 7426--- 7427 7428**#CiscoMeraki #BackupDeRede #GerenciamentoDeConfiguração #RecuperaçãoDeDesastres #MSP #TIEmpresarial #SelentAI** 7429`},{slug:"year-networks-cannot-afford-to-fail",title:"2026: O Ano em que as Redes Não Podem Mais Falhar",excerpt:"A confiabilidade da rede agora é um risco empresarial crÃtico. Mais de 60% das interrupções são causadas por humanos, e a recuperação depende de backups adequados. Descubra por que 2026 deve ser o ano da automação de recuperação de redes.",date:"2026-01-26",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Operações de Rede",tags:["Confiabilidade de Rede","Gerenciamento de Configuração","Recuperação de Desastres","Backup e Restauração","AIOps","Conformidade","Automação de Redes"],coverImage:"/network-node-splitting.png",featured:!0,draft:!1,readTime:"4 min",content:` 7430Ao começarmos 2026, uma coisa está clara: **a confiabilidade da rede não é mais apenas uma preocupação de TI. à um risco empresarial crÃtico.** 7431 7432Cada serviço digital, cada transação, cada experiência do usuário depen
7432de de uma rede que não apenas esteja disponÃvel, mas também corretamente configurada e recuperável. E, no entanto, a maioria das interrupções de rede hoje não são causadas por falhas de hardware ou ataques cibernéticos. São causadas por algo muito mais básico: 7433 7434**Erros de configuração e falta de backups adequados.** 7435 7436Esta é a verdade desconfortável que muitas organizações ainda subestimam. 7437 7438## O Tempo de Inatividade Não à Mais uma Exceção. à um Padrão. 7439 7440Estudos da indústria mostram consistentemente que: 7441 7442- **Mais de 60% dos incidentes de rede** estão relacionados a erros humanos 7443- **Erros de configuração** são a causa #1 de grandes interrupções 7444- **Os tempos de recuperação** estão diretamente correlacionados com a existência de um backup de configuração limpo 7445 7446Uma única VLAN errada, regra de firewall, polÃtica de roteamento ou alteração de SSID pode: 7447 7448- Desconectar milhares de usuários 7449- Parar sistemas de ponto de venda 7450- Quebrar o acesso remoto 7451- Violar requisitos de conformidade 7452- Causar danos reputacionais e financeiros em minutos 7453 7454E quando não existe um backup recente e verificado, a recuperação se torna lenta, manual e arriscada. 7455 7456**Nesse ponto, você não está restaurando. Você está reconstruindo sob pressão.** 7457 7458## A Ilusão de Segurança: "Podemos Reconfigurar" 7459 7460Muitas equipes ainda dependem de: 7461 7462- Exportações manuais 7463- Scripts ad-hoc 7464- Laptops dos engenheiros 7465- Memória e conhecimento tribal 7466 7467Isso cria uma falsa sensação de segurança. 7468 7469Em incidentes reais: 7470 7471- A pessoa que fez a alteração pode não estar disponÃvel 7472- A última configuração "conhecida como boa" pode não existir 7473- A documentação frequentemente está desatualizada 7474- Reconstruir do zero introduz novos erros 7475 7476**Sem backups automatizados, versionados e restauráveis, sua rede está efetivamente sem seguro.** 7477 7478## Backups Não São Opcionais. São Parte da Disponibilidade. 7479 7480Em 2026, disponibilidade significa mais do que uptime. Significa: 7481 7482- A capacidade de **reverter instantaneamente** 7483- A capacidade de **comparar configurações semanticamente** 7484- A capacidade de **detectar mudanças arriscadas** antes que quebrem a produção 7485- A capacidade de **recuperar sem pânico humano** 7486 7487**Uma rede sem backup não é resiliente. à frágil.** 7488 7489## Risco de Conformidade e Auditoria 7490 7491Para indústrias regulamentadas (finanças, saúde, varejo, educação, governo), backups de configuração não são apenas proteção operacional. Também são: 7492 7493- Evidência de controle 7494- Prova de rastreamento de mudanças 7495- Um requisito para muitos frameworks de segurança 7496 7497Sem estratégia de backup significa: 7498 7499- Sem postura real de conformidade 7500- Sem processo de recuperação de incidentes defensável 7501- Sem trilha de auditoria confiável 7502 7503## 2026 Deve Ser o Ano da Automação de Recuperação de Redes 7504 7505à para onde a indústria está caminhando: 7506 7507**Não apenas monitoramento. Não apenas alertas. Mas recuperação automatizada e inteligência de configuração.** 7508 7509As redes devem se tornar: 7510 7511- **Auto-documentadas** 7512- **Versionadas** 7513- **Conscientes de diferenças** 7514- **Restauráveis em segundos, não horas** 7515 7516Esta é a base para AIOps. Sem backups, a IA não tem nada seguro para operar. 7517 7518## Por Que Isso Importa para a Selent 7519 7520Na Selent, toda a nossa plataforma parte de um princÃpio simples: 7521 7522> **Você não pode automatizar o que não pode restaurar com segurança.** 7523 7524Antes que os agentes de IA possam analisar, prever e remediar, sua rede deve estar: 7525 7526- Backupeada 7527- Versionada 7528- Rastreável 7529- Recuperável 7530 7531**Backup e Restauração Segura não é uma funcionalidade. à a camada base da autonomia de rede.** 7532 7533## 2026 à o Botão de Reset 7534 7535Este ano, as equipes de rede terão que responder uma pergunta honestamente: 7536 7537> *"Se toda a nossa rede for desconfigurada agora... Quão rápido podemos voltar?"* 7538 7539Se a resposta não for: 7540 7541- **Minutos** 7542- **Automatizado** 7543- **DeterminÃstico** 7544 7545Então seu maior risco não é o tempo de inatividade. **à a falsa confiança.** 7546 7547--- 7548 7549**Que 2026 seja o ano em que as redes deixem de ser frágeis e comecem a ser recuperáveis.** 7550 7551Saiba mais em [www.selent.ai](https://www.selent.ai) 7552 7553--- 7554 7555**#ResiliênciaDeRede #BackupERestauração #AutomaçãoDeRedes #AIOps #SelentAI #GerenciamentoDeConfiguração #RecuperaçãoDeDesastres** 7556`},{slug:"network-automation-mcp-essential-ai-enterprise",title:"Por Que Automacao de Rede + MCP e Agora
7556Essencial para Operacoes Empresariais Impulsionadas por IA",excerpt:"Descubra por que IA sozinha nao resolve complexidade operacional - automacao resolve. Aprenda como uma Plataforma de Gerenciamento e Controle (MCP) permite que empresas passem de combate reativo a incendios para operacoes de rede proativas impulsionadas por IA com automacao segura de ciclo fechado.",date:"2025-12-08",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Operacoes de Rede",tags:["Enterprise Networking","Network Automation","MCP","AIOps","AI Agents","Cisco","Configuration Management","Compliance"],coverImage:"/network-automation-mcp-ai-enterprise.png",featured:!0,draft:!1,readTime:"6 min",content:` 7557A rede empresarial nunca foi mais critica - ou mais complexa. Trabalho hibrido, expansao de SaaS, operacoes multi-filial, dispositivos IoT e adocao de nuvem multiplicaram as pecas moveis. No entanto, a maioria das equipes de TI ainda deve suportar mais usuarios, mais dispositivos e SLAs mais rigorosos com aproximadamente o mesmo quadro de funcionarios. 7558 7559Esta e exatamente a razao pela qual analistas continuam enfatizando a necessidade de automacao e operacoes impulsionadas por IA: 7560 7561- **O mercado de automacao de rede** deve crescer mais de 4x na proxima decada conforme empresas mudam de operacoes manuais para modelos automatizados baseados em intencao 7562- **O mercado de plataformas AIOps** deve dobrar ate 2030 conforme empresas dependem de IA para filtrar telemetria e automatizar resposta a incidentes 7563- **Tempo de inatividade continua custando as empresas** entre $5.600 e $9.000 por minuto, dependendo da industria, segundo Gartner e outras pesquisas empresariais 7564 7565A mensagem e clara: IA sozinha nao resolve complexidade operacional - automacao resolve. E automacao so e confiavel quando alimentada por uma Plataforma de Gerenciamento e Controle (MCP) forte e centralizada. 7566 7567## Por Que IA Sem Automacao Falha Dentro da Empresa 7568 7569A maioria das equipes de TI empresariais ja tem um monte de ferramentas: 7570 7571- Plataformas de monitoramento 7572- Analytics de endpoint e rede 7573- Dashboards e alertas em todo lugar 7574- Alguns scripts internos 7575 7576IA frequentemente e adicionada como outra camada - deteccao de anomalias, alertas preditivos, troubleshooting baseado em chat. O problema? Se a rede em si ainda e operada manualmente, IA se torna consultiva em vez de transformadora. 7577 7578Isso leva a: 7579 7580- IA surfando problemas sem forma segura de auto-corrigi-los 7581- Alertas prevendo falhas mas sem aplicacao automatizada de melhores praticas 7582- Dashboards ricos em insights que ainda requerem triagem manual e mudancas manuais 7583 7584Empresas rapidamente percebem que o gargalo nao e visibilidade - e acionabilidade. A rede precisa de um plano de controle consistente e programavel antes que IA possa fechar o ciclo. 7585 7586## O Que um MCP Significa para a Empresa Moderna 7587 7588Uma Plataforma de Gerenciamento e Controle nao e outra ferramenta de monitoramento; e a camada de automacao e governanca que conecta visibilidade com acao. 7589 7590### 1. Uma Camada de Abstracao Unificada 7591 7592Sites diferentes, modelos de dispositivos diferentes, configuracoes diferentes - mas TI precisa de um unico modelo operacional. 7593 7594Um MCP normaliza: 7595 7596- Configuracoes 7597- Telemetria 7598- Politicas 7599- Topologia 7600 7601Atraves de vendors e tecnologias. 7602 7603### 2. Governanca de Rede Baseada em Politicas 7604 7605Em vez de fazer mudancas manualmente dispositivo por dispositivo, empresas definem intencao: 7606 7607- "WiFi de convidados deve ser isolado em todas as subsidiarias." 7608- "Todos os switches devem aplicar nossa linha de base de seguranca padrao." 7609- "Nenhum site deve derivar da configuracao aprovada." 7610 7611O MCP transforma essa intencao em acoes automatizadas e aplicaveis. 7612 7613### 3. Telemetria Limpa para IA 7614 7615IA e tao boa quanto os dados que recebe. 7616 7617Um MCP fornece: 7618 7619- Eventos correlacionados 7620- Diffs de configuracao ao vivo 7621- Consciencia de topologia 7622- Linhas de base historicas 7623 7624Isso permite que agentes de IA raciocinem com contexto real, nao ruido bruto. 7625 7626### 4. Execucao Segura + Guardrails 7627 7628Automacao deve ser segura: 7629 7630- Simulacao de teste a seco 7631- Controle de raio de explosao 7632- Procedimentos de rollback 7633- Fluxos de trabalho de aprovacao 7634 7635Isso permite que empresas adotem automacao com confianca, sem medo de interrupcoes generalizadas. 7636 7637## Como MCP + IA Eleva Operacoes Empresariais 7638 7639### 1. Monitoramento Mais Inteligente e Contextual 7640 7641Monitoramento tradicional lanca alertas; IA reduz ruido - mas com dados de backend de MCP, IA se torna verdadeiramente contextual: 7642 7643- O que mudou antes de um incidente? 7644- Este problema e isolado ou sistemico? 7645- Isso e drift de configuracao ou falha de hardware? 7646- Como este site se comportou historicamente? 7647 7648Isso move TI de combate reativo a incendios para estabilidade proativa. 7649 7650### 2. Remediacao Rapida e Controlada 7651 7652Com fluxos de trabalho de automacao padronizados, empresas podem: 7653 7654- Auto-resolver problemas de baixo risco 7655- Dar a agentes de IA a capacidade de propor mudancas seguras 7656- Reverter configs ruins instantaneamente 7657- Aplicar linhas de base atraves de centenas ou milhares de dispositivos 7658 7659O resultado e MTTR mais curto e desempenho de rede mais previsivel. 7660 7661### 3. Melhoria Continua Atraves de Insights de IA 7662 7663IA pode analisar padroes atraves da empresa: 7664 7665- Quais configuracoes correlacionam com menos incidentes? 7666- Quais sites estao derivando mais frequentemente? 7667- Que melhorias podem ser padronizadas globalmente? 7668 7669Combinado com automacao, TI pode empurrar melhorias recomendadas de forma confiavel e segura. 7670 7671### 4. Resiliencia Proativa em Nivel de Negocio 7672 7673O objetivo real e prevenir interrupcoes muito antes que afetem operacoes. 7674 7675Com MCP + IA, empresas podem: 7676 7677- Prever saturacao de link antes que usuarios percebam 7678- Detectar misconfiguracoes que aumentam risco de seguranca 7679- Aplicar conformidade automaticamente 7680- Simular mudancas de configuracao antes do rollout 7681 7682Isso fortalece resiliencia operacional e reduz tempo de inatividade
7682custoso. 7683 7684## Por Que MCP Esta Se Tornando uma Prioridade Estrategica para Empresas 7685 7686Empresas adotando MCPs ganham: 7687 7688- **Seguranca e conformidade mais fortes** atraves de linhas de base aplicadas 7689- **Deploy e replicacao de filial/site mais rapidos** 7690- **Ciclos de troubleshooting drasticamente mais curtos** 7691- **Experiencia de usuario mais estavel** 7692- **Uma plataforma onde IA pode tomar acao real**, nao apenas dar conselhos 7693 7694Conforme redes se tornam mais distribuidas, MCP se torna o "sistema nervoso digital" que conecta tudo. 7695 7696## Como Selent MCP Vai Alem da Abordagem Basica 7697 7698Selent MCP foi construido como uma camada de automacao e orquestracao de IA nativa e totalmente integrada para redes centradas em Cisco, dando a equipes de TI empresariais o poder de aplicar conformidade, automatizar com seguranca e agir proativamente em escala. 7699 7700Diferente de ferramentas de monitoramento tradicionais, Selent MCP normaliza telemetria, configuracoes e politicas para que agentes de IA possam raciocinar e executar com contexto real. Com automacao de ciclo fechado, integracao profunda com Cisco e uma arquitetura dinamica projetada para agentes de IA especializados, Selent move empresas de gerenciamento de rede reativo para um modelo operacional resiliente e de auto-melhoria. 7701 7702**Pronto para transformar suas operacoes de rede com automacao impulsionada por IA?** 7703 7704**Comece sua avaliacao gratuita de 14 dias hoje em [selent.ai](https://www.selent.ai) - sem cartao de credito necessario.** 7705 7706--- 7707 7708**#EnterpriseNetworking #NetworkAutomation #MCP #AIOps #SelentAI #CiscoNetworking #ITOperations** 7709`},{slug:"network-resilience-msp-survival-metric",title:"Resiliencia de Rede: Por Que Agora e uma Metrica de Sobrevivencia para MSPs",excerpt:"Descubra por que resiliencia de rede se tornou um KPI central para MSPs, estrategias praticas de baixa friccao para manter redes funcionando e como ferramentas de automacao como Selent MCP estao ajudando MSPs a escalar sem esgotar suas equipes.",date:"2025-11-26",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Operacoes de Rede",tags:["MSP","Network Resilience","Cisco Meraki","Automation","Configuration Management","Compliance","AIOps"],coverImage:"/network-resilience-msp.png",featured:!0,draft:!1,readTime:"8 min",content:` 7710Resiliencia de rede nao e mais um "bom ter" para Provedores de Servicos Gerenciados - e o negocio. Quando redes estao fora do ar, seus clientes perdem receita, seu helpdesk e bombardeado e seus SLAs comecam a contar como uma bomba-relogio. 7711 7712Este post explora por que resiliencia deveria ser um KPI central para MSPs, formas praticas de baixa friccao para manter redes funcionando e como automacao esta silenciosamente se tornando a diferenca entre "estamos sobrevivendo" e "estamos escalando." 7713 7714## Por Que Resiliencia de Rede Agora e uma Metrica de Sobrevivencia para MSPs 7715 7716Tempo de inatividade sempre foi caro, mas os numeros continuam piorando: 7717 7718- **A estimativa amplamente citada da Gartner** coloca o custo medio de tempo de inatividade de TI em cerca de $5.600 por minuto para organizacoes maiores - mais de $300K por hora 7719- **Mesmo para negocios menores**, estudos mostram que tempo de inatividade ainda custa centenas de dolares por minuto, tipicamente na faixa de $137â$427 por minuto 7720 7721Para MSPs, esse custo nao esta apenas do lado do cliente. Cada interrupcao tambem impacta: 7722 7723- Sua equipe de suporte (mais tickets, mais escalacoes) 7724- Suas margens (trabalho nao planejado, horas extras) 7725- Sua reputacao e taxas de renovacao 7726 7727Ao mesmo tempo, ambientes modernos sao muito mais complexos do que um unico roteador e alguns switches. Trabalho hibrido, SaaS, SD-WAN, Wi-Fi em todo lugar, IoT⦠cada novo projeto adiciona outra peca movel que o MSP deve manter "sempre ligado." 7728 7729Nenhuma surpresa que em pesquisas recentes de profissionais de TI e MSP: 7730 7731- **60% dos MSPs** relatam burnout moderado a alto 7732- **Proliferacao de ferramentas e falta de visibilidade em tempo real** sao citadas como principais pontos de dor operacional 7733 7734Resiliencia nao e apenas sobre redundancia de hardware. E sobre projetar operacoes para lidar com erros, mudancas e surpresas - e fazer isso em escala. 7735 7736## Erro Humano: Ainda o Inimigo #1 do Uptime 7737 7738Apesar de todo o investimento em infraestrutura, pessoas e processos ainda sao o elo mais fraco: 7739 7740- **A analise de interrupcoes do Uptime Institute** mostra que 66â80% dos incidentes de inatividade envolvem erro humano de alguma forma 7741- Em um relatorio mais recente, **quase 40% das organizacoes** dizem ter sofrido uma grande interrupcao causada por erro humano apenas nos ultimos tres anos 7742- **Problemas relacionados a rede** agora sao responsaveis por cerca de 30% das interrupcoes de servico de TI de ponta a ponta em data centers 7743 7744Para MSPs, isso geralmente se parece com: 7745 7746- Uma mudanca de configuracao apressada em uma sexta-feira a tarde 7747- Um site clonado que carregou uma configuracao antiga de VLAN, ACL ou SSID 7748- Um backup ausente ou desatualizado quando um dispositivo falha 7749- Mudancas "pequenas" feitas diretamente em um dashboard sem nenhum registro ou plano de rollback 7750 7751E exatamente aqui que automacao e padronizacao podem transformar resiliencia de pensamento positivo em uma pratica repetivel. 7752 7753## Formas Simples de Alta Alavancagem para MSPs Aumentarem Resiliencia de Rede 7754 7755Voce nao precisa de um programa de transformacao gigante para mover a agulha. Aqui estao padroes praticos de "vitoria facil" que MSPs podem aplicar atraves de Cisco Meraki e ambientes similares. 7756 7757### 1. Padronize Configuracoes com Templates Dourados 7758 7759Crie templates dourados para topologias comuns: escritorios filiais, lojas de varejo, clinicas, armazens, etc. 7760 7761- Defina VLANs, SSIDs, regras de firewall, QoS, linhas de base de seguranca padrao 7762- Aplique-os usando templates ou clonagem de rede, em vez de "clicar por ai" por site 7763- Versione esses templates e trate mudancas como codigo (revisar, aprovar, depois implantar) 7764 7765Isso reduz drift e torna muito menos provavel que um site tenha uma configuracao "especial" que ninguem lembra ate quebrar. 7766 7767### 2. Automatize Backups e Versionamento de Configuracao 7768 7769Soa basico, mas muitas redes ainda nao tem backups completos e automatizados de configuracao atraves de todos os dispositivos. 7770 7771Para resiliencia, MSPs deveriam: 7772 7773- Fazer backups agendados de cada configuracao (switches, firewalls, APs, MX, etc.) 7774- Armazenar versoes com timestamps claros e metadados de mudanca 7775- Fazer fluxos de trabalho de restore serem "um clique" (ou proximo) para quando algo der errado 7776 7777A chave e nenhum heroismo durante uma interrupcao: o caminho de restore deveria ser obvio, testado e rapido. 7778 7779### 3. Use Janelas de Mudanca Seguras e Verificacoes Pre-Mudanca 7780 7781Nem toda mudanca e igual, mas algumas salvaguardas vao longe: 7782 7783- Defina janelas de mudanca padrao para atualizacoes de maior risco (ex: regras de firewall, roteamento central) 7784- Execute verificacoes pre-mudanca: alcancabilidade, status de redundancia, linting basico de config (ex: subnets duplicadas, regras conflitantes) 7785- Tenha um plano de rollback documentado para cada mudanca de medio/alto risco 7786 7787E assim que voce ativamente reduz o numero de incidentes induzidos por erro humano (a maioria do tempo de inatividade). 7788 7789### 4. Clone Redes da Forma Inteligente 7790 7791Plataformas gerenciadas em nuvem como Cisco Meraki facilitam criar novos sites via clonagem e templates - o que e uma grande vitoria para MSPs gerenciando centenas de sites. Os proprios dados da Meraki mostram mais de 190M dispositivos conectados atraves de mais de 4M redes ativas globalmente, todos gerenciados da nuvem. 7792 7793Para tornar clonagem resiliente: 7794 7795- Separe parametros especificos de local (faixas de IP, tags, SSIDs, VLANs) em variaveis 7796- Use scripts ou automacoes para popular essas variaveis com seguranca 7797- Valide novas implantacoes contra um checklist antes da entrega 7798 7799### 5. Monitore Sintomas, Nao Apenas "Up/Down" 7800 7801Verificacoes de ping nao sao suficientes. Sinais simples de alto valor incluem: 7802 7803- Utilizacao de WAN e limites de latencia por site 7804- Contagens de clientes de AP e taxas de erro 7805- Mudancas de status de porta de switch em uplinks criticos 7806- Mudancas repentinas em configuracao (vs. linha de base anterior) 7807 7808O truque nao e "mais alertas" - sao menos alertas, melhores, ligados a runbooks claros para que seu NOC saiba exatamente o que fazer. 7809 7810### 6. Teste Recuperacao Como Voce Testa Backups 7811 7812Todo MSP diz, "temos backups." Muito menos podem dizer, "testamos restores regularmente." 7813 7814Faca parte das operacoes: 7815 7816- Escolha um site ou tipo de dispositivo regularmente 7817- Realize um restore de config controlado de backup em um lab ou ambiente nao critico 7818- Ajuste runbooks baseado no que foi lento, doloroso ou incerto 7819 7820Isso constroi musculo real de resiliencia e da a sua equipe confianca quando algo serio quebra. 7821 7822## Por Que Isso Importa Especificamente para MSPs 7823 7824MSPs estao na intersecao de risco e confianca: 7825 7826- **Clientes esperam que voce "mantenha as coisas funcionando"** - frequentemente sem entender completamente a complexidade envolvida 7827- **SLAs e contratos** cada vez mais referenciam disponibilidade, tempo de recuperacao e expectativas de seguranca 7828- **Novas regulamentacoes e frameworks** (ISO, SOC 2, PCI DSS, HIPAA, etc.) incorporam resiliencia, controle de mudancas e auditabilidade no que "bom" parece 7829 7830Pesquisas da industria mostram que MSPs estao respondendo expandindo suas ofertas; um relatorio de 2024 descobriu que **97% dos MSPs planejam adicionar novos servicos**, com forte foco em ofertas relacionadas a seguranca e resiliencia. 7831 7832Mas adicionar servicos sem simplificar operacoes pode piorar as coisas: mais ferramentas, mais dashboards, mais formas de cometer erros. Automacao e uma mentalidade de plataforma sao como MSPs crescem receita sem esgotar suas equipes. 7833 7834## Como Selent MCP e Ferramentas de Automacao Ajudam MSPs a Construir Resiliencia por Padrao 7835 7836Este e exatamente o espaco de problemas onde Selent esta focada - especialmente para MSPs rodando grandes estates Cisco Meraki. 7837 7838Algumas formas como MSPs estao usando Selent MCP e modulos de automacao hoje para melhorar resiliencia: 7839 7840### Backup e Restore Automatizado Atraves de Organizacoes 7841 7842- Backups continuos e orientados por politica de configuracoes Meraki atraves de todas as redes e dispositivos 7843- Historico de versao centralizado para que voce possa rapidamente ver o que mudou, onde e quando 7844- Fluxos de trabalho de restore guiados para reverter misconfiguracoes em minutos, nao horas 7845 7846### Implantacoes Mais Seguras e Repetiveis 7847 7848- Clonagem de rede e deploy em massa de portas de switch automatizados via API em vez de cliques manuais
7849- Templates padronizados aplicados consistentemente atraves de dezenas ou centenas de sites 7850- Chance reduzida de erros "unicos" que depois causam interrupcoes 7851 7852### Verificacoes de Config e Conformidade Antes das Coisas Quebrarem 7853 7854- Verificacoes automatizadas para configuracoes arriscadas ou nao padrao 7855- Deteccao precoce de drift de seus templates dourados ou linhas de base de politica 7856- Suporte para visoes orientadas a conformidade (ex: segmentacao, logging, configuracoes de seguranca) para alinhar com frameworks que seus clientes se importam 7857 7858### "Co-Piloto" Operacional para Engenheiros MSP 7859 7860- Selent MCP expoe a superficie de API do Meraki atraves de fluxos de trabalho amigaveis para automacao e agentes de IA 7861- Sua equipe gasta menos tempo cacando dados atraves de dashboards e mais tempo agindo em insights 7862- Com o tempo, isso reduz proliferacao de ferramentas e da a voce uma camada operacional mais unificada para redes Meraki 7863 7864**O resultado liquido:** menos interrupcoes, recuperacoes mais rapidas e margens mais altas por dispositivo sob gerenciamento. 7865 7866## Comecando com Resiliencia de Rede 7867 7868Se voce e um MSP gerenciando redes Cisco Meraki e quer: 7869 7870- Reduzir risco de tempo de inatividade 7871- Padronizar operacoes atraves de muitos clientes e sites 7872- Dar a sua equipe superpoderes de automacao sem escrever uma plataforma interna completa 7873 7874Entao resiliencia de rede e o lugar perfeito para comecar - e Selent MCP e projetado para tornar essa jornada muito mais facil. 7875 7876**Comece sua avaliacao gratuita de 14 dias hoje em [selent.ai](https://www.selent.ai) - sem cartao de credito necessario.** 7877 7878--- 7879 7880**#MSP #NetworkResilience #CiscoMeraki #NetworkAutomation #AIOps #SelentAI #ITOperations** 7881`},{slug:"hidden-cost-misconfigurations-cisco-meraki",title:"O Custo Oculto de Misconfiguracoes em Redes Cisco Meraki - e Como Selent as Previne",excerpt:"Descubra como misconfiguracoes de rede causam 80% das interrupcoes nao planejadas e custam milhares por minuto - e como a plataforma de automacao impulsionada por IA da Selent protege seu ambiente Cisco Meraki com backups automatizados, deteccao de drift e capacidades de restore com um clique.",date:"2025-11-17",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Operacoes de Rede",tags:["Cisco Meraki","Network Security","Configuration Management","AI Automation","Compliance","MSP"],coverImage:"/network-node-splitting.png",featured:!0,draft:!1,readTime:"4 min",content:` 7882Em operacoes de rede, o menor erro pode ter o maior impacto. Para administradores Cisco Meraki gerenciando multiplos sites ou clientes, misconfiguracoes sao uma das fontes mais comuns - e mais caras - de tempo de inatividade, perda de dados e risco de conformidade. 7883 7884## Por Que Misconfiguracoes Acontecem 7885 7886A arquitetura gerenciada em nuvem do Cisco Meraki torna incrivelmente facil implantar, modificar e replicar configuracoes atraves de dispositivos e redes. Essa mesma simplicidade, no entanto, e o que torna organizacoes vulneraveis a erro humano. 7887 7888Cenarios comuns incluem: 7889 7890- Uma mudanca de VLAN em um site que acidentalmente se propaga para outros 7891- Uma regra de firewall deletada durante manutencao, quebrando acesso remoto 7892- Uma atualizacao de template que sobrescreve configuracoes locais 7893- Uma modificacao de SSID que desconecta clientes wireless em producao 7894 7895Em uma implantacao de organizacao unica, esses erros sao disruptivos. Atraves de dezenas ou centenas de redes, podem se tornar catastroficos - afetando milhares de usuarios, experiencias de clientes e postura de seguranca. 7896 7897## O Custo Real de uma Misconfiguracao 7898 7899Quando equipes de rede pensam em "tempo de inatividade", frequentemente imaginam falha de hardware ou interrupcoes de ISP. Mas estatisticamente, erros de configuracao causam mais incidentes do que qualquer outro fator. 7900 7901Benchmarks da industria estimam que: 7902 7903- **80% das interrupcoes nao planejadas** sao causadas por misconfiguracoes 7904- **O custo medio de tempo de inatividade de rede** excede $5.600 por minuto para ambientes empresariais 7905- **Incidentes relacionados a conformidade** (PCI, ISO, HIPAA) frequentemente derivam de politicas inconsistentes de firewall ou SSID 7906 7907Para provedores de servicos gerenciados (MSPs) e parceiros de TI, uma unica misconfiguracao tambem pode significar: 7908 7909- Penalidades contratuais por violacoes de SLA 7910- Perda de confianca do cliente 7911- Horas de rollback manual - se backups sequer existirem 7912 7913Em resumo: o que parece um pequeno erro pode custar milhares de dolares e danos a reputacao. 7914 7915## A Lacuna de Visibilidade em Operacoes Meraki 7916 7917Enquanto Cisco Meraki fornece excelente visibilidade e monitoramento atraves de seu Dashboard e APIs, ainda ha uma lacuna critica: **nao oferece nativamente backup completo de configuracao, deteccao de drift ou restore automatizado atraves de organizacoes.** 7918 7919Para grandes redes ou MSPs gerenciando multiplos tenants, isso significa: 7920 7921- Nenhuma forma facil de comparar configuracoes entre redes 7922- Nenhuma trilha de auditoria do que mudou e quando 7923- Nenhum rollback com um clique se algo der errado 7924 7925E ai que Selent entra. 7926 7927## Como Selent Previne e Corrige Misconfiguracoes 7928 7929Selent e uma plataforma de automacao impulsionada por IA construida especificamente para ambientes Cisco Meraki. Ela protege continuamente sua rede de riscos de configuracao atraves de quatro capacidades centrais: 7930 7931### 1. Backups Automatizados 7932 7933Selent automaticamente captura e versiona cada configuracao de dispositivo e rede Meraki. Voce sempre tem uma copia segura e criptografada para restaurar - sem exportacao manual ou scripting. 7934 7935### 2. Deteccao de Drift Impulsionada por IA 7936 7937Nossos Agentes Selent especializados analisam mudancas de configuracao atraves do tempo e organizacoes, identificando anomalias ou drifts da linha de base desejada. A plataforma usa analise de diff semantico para sinalizar o que realmente importa - nao apenas mudancas linha por linha. 7938 7939### 3. Restore com Um Clique 7940 7941Quando problemas surgem, voce pode instantaneamente reverter para uma configuracao conhecida como boa. Chega de recriar configuracoes complexas manualmente - apenas escolha um snapshot de backup e restaure em segundos. 7942 7943### 4. Conformidade e Relatorios 7944 7945Selent fornece relatorios prontos para auditoria mostrando quem mudou o que, quando e como isso afetou politicas de conformidade. Seja precisando de alinhamento PCI, ISO ou governanca interna, visibilidade e automatica. 7946 7947## O Resultado: Resiliencia Operacional 7948 7949Com Selent em funcionamento, equipes de operacoes de rede e MSPs podem: 7950 7951- Detectar mudancas de configuracao arriscadas antes que causem interrupcoes 7952- Reduzir retrabalho manual e tempo de troubleshooting em ate 70% 7953- Garantir conformidade e seguranca consistentes atraves de todos os ambientes Meraki 7954- Entregar uma experiencia melhor e mais confiavel para usuarios finais 7955 7956Selent transforma o que era combate reativo a incendios em protecao proativa. 7957 7958## Preparando-se para Cisco Catalyst 7959 7960Enquanto a plataforma da Selent esta atualmente otimizada para Cisco Meraki, estamos ativamente estendendo nossos Agentes de IA e Servidor MCP para suportar o ecossistema Cisco Catalyst. Esta abordagem unificada permitira que equipes de TI gerenciem tanto dispositivos Cisco gerenciados em nuvem quanto on-premise sob um unico framework de automacao inteligente. 7961 7962## Conclusao 7963 7964Misconfiguracoes de rede nao vao desaparecer - mas seu impacto pode ser eliminado. Com a automacao certa e visibilidade impulsionada por IA, voce pode parar erros custosos antes que se espalhem e se recuperar de incidentes em minutos, nao horas. 7965 7966Selent empodera voce a fazer exatamente isso: **operacoes de rede resilientes, conformes e inteligentes construidas para a era Cisco Meraki.** 7967 7968Saiba mais em [www.selent.ai](https://www.selent.ai) 7969 7970--- 7971 7972**#CiscoMeraki #NetworkAutomation #AIOps #SelentAI #NetworkResilience #CiscoNetworking** 7973`},{slug:"elevating-managed-services-with-ai",title:"Elevando Servicos Gerenciados com IA: Como Selent Transforma Operacoes de Rede Cisco",excerpt:"Descubra como a plataforma de automacao impulsionada por IA da Selent transforma operacoes de Provedores de Servicos Gerenciados com gerenciamento inteligente de configuracao, automacao de conformidade e operacoes de rede autonomas para ambientes Cisco Meraki e Catalyst.",date:"2025-11-04",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Produto",tags:["MSP","AI","Network Automation","Cisco Meraki","Cisco Catalyst","Compliance","MCP"],coverImage:"/elevating-managed-services-with-ai.png",featured:!0,draft:!1,readTime:"4 min",content:` 7974Para Provedores de Servicos Gerenciados (MSPs), eficiencia, visibilidade e automacao nao sao mais opcionais - sao a base de operacoes escalaveis e lucrativas. No entanto, muitos MSPs gerenciando redes Cisco ainda lutam com tarefas manuais de configuracao, lacunas de conformidade e opcoes limitadas de recuperacao atraves dos ambientes de seus clientes. 7975 7976E ai que Selent faz a diferenca. Construida especificamente para Cisco Networking, Selent e uma plataforma de automacao impulsionada por IA que redefine como MSPs operam, protegem e escalam suas implantacoes Meraki - e em breve, ambientes Cisco Catalyst (atualmente em desenvolvimento). 7977 7978## De Manual para Operacoes de Rede Impulsionadas por IA 7979 7980Engenheiros de rede gastam ate 70% de seu tempo em tarefas repetitivas de configuracao, deixando pouca largura de banda para trabalho estrategico. Selent elimina essa friccao atraves de automacao inteligente, habilitando MSPs a: 7981 7982- Automatizar backups de configuracao a cada seis horas 7983- Restaurar instantaneamente qualquer dispositivo de um snapshot seguro 7984- Entender mudancas de configuracao em portugues simples 7985- Pesquisar toda a rede usando linguagem natural 7986- Auditar conformidade continuamente 7987 7988O resultado: recuperacao de incidentes mais rapida, zero drift de configuracao e uma trilha de auditoria completa atraves de cada organizacao gerenciada. 7989 7990## Agentes Especializados: Transformando Automacao em Inteligencia 7991 7992Os Agentes Especializados da Selent vao alem de automacao - trazem verdadeira inteligencia para operacoes gerenciadas. Projetados para MSPs, estes agentes ajudam a garantir desempenho, conformidade e resiliencia atraves de multiplas redes de clientes: 7993 7994**Agente de Conformidade** - Verifica automaticamente configuracoes contra padroes da industria como HIPAA, PCI-DSS e ISO 27001. 7995 7996**Agente de Saude de Rede** - Monitora desempenho de rede, detectando anomalias antes que afetem usuarios finais. 7997 7998**Agente de Monitoramento** - Rastreia eventos criticos e fornece insights baseados em IA para gerenciamento proativo. 7999 8000Com estes agentes, MSPs podem reduzir overhead operacional, melhorar SLAs e entregar um padrao mais alto de servico sem expandir suas equipes de suporte. 8001 8002## Selent MCP: A Ponte de IA para Cisco Networking 8003 8004No coracao da inovacao da Selent esta Selent MCP (Model Context Protocol) - um framework aberto que conecta operacoes de rede Cisco com modelos modernos de IA como Claude ou ChatGPT. 8005 8006Com MCP, MSPs podem desenvolver agentes de IA customizados que entendem e agem sobre seus dados de rede - desde gerar relatorios de conformidade ate automatizar fluxos de trabalho de remediacao. MCP transforma o Centro de Operacoes de Rede (NOC) em um hub de controle aumentado por IA, capaz de aprender, raciocinar e responder em tempo real. 8007 8008## Expandindo para Cisco Catalyst (Em Andamento) 8009 8010Enquanto Selent ja esta transformando operacoes Cisco Meraki, a proxima evolucao esta em andamento: suporte nativo para Cisco Catalyst. Esta integracao vindoura unificara automacao, conformidade e insights impulsionados por IA atraves do ecossistema mais amplo de Cisco Networking, permitindo que MSPs gerenciem infraestruturas hibridas de uma unica plataforma
8010inteligente. 8011 8012## Por Que MSPs Escolhem Selent 8013 8014Selent foi construida com MSPs em mente - oferecendo as ferramentas, automacao e inteligencia necessarias para escalar eficientemente: 8015 8016- 70% recuperacao de incidentes mais rapida 8017- Zero perda de configuracao 8018- Relatorios de conformidade instantaneos 8019- SLA de 99,9% uptime 8020- Visibilidade e controle multi-organizacao 8021 8022Seja gerenciando dez ou mil clientes, Selent empodera MSPs a operar com precisao, velocidade e confianca. 8023 8024## O Futuro das Operacoes de Rede Cisco e Autonomo 8025 8026A era do gerenciamento manual de rede esta terminando. Conforme automacao encontra inteligencia, MSPs adotando a plataforma impulsionada por IA da Selent - e seu framework aberto Selent MCP - estao liderando a mudanca em direcao a operacoes autonomas e resilientes. 8027 8028E com suporte a Cisco Catalyst em andamento, Selent esta preparada para unificar a experiencia completa de Cisco Networking sob um teto poderoso e impulsionado por IA. 8029 8030**Comece sua avaliacao gratuita de 14 dias hoje em selent.ai - sem cartao de credito necessario.** 8031 8032Selent: Mais Inteligente. Mais Seguro. Automatizado. 8033`},{slug:"selent-mcp-semantic-search-multi-key",title:"Atualizacao Selent MCP: Descoberta de API Impulsionada por IA e Gerenciamento Multi-Cliente",excerpt:"Aprenda sobre a ultima atualizacao MCP da Selent com busca semantica para descoberta de API e capacidades de gerenciamento multi-cliente para MSPs. Descubra como busca semantica baseada em vetores e suporte inteligente multi-chave melhoram fluxos de trabalho de operacoes de rede.",date:"2025-10-30",author:"Fabian Levinsky",authorImage:"/fabian.jpeg",authorTitle:"Head of Engineering",authorBio:"Fabian is the Head of Engineering at Selent, leading backend systems, AI engineering, and frontend development. With deep expertise in distributed systems and intelligent automation, he architects the core technology that powers Selent's network operations platform.",category:"Tecnico",tags:["MCP","AI","Network Automation","Cisco Meraki","MSP","SemanticSearch","VectorDatabase","Qdrant"],coverImage:"/mcp-update-blog.png",featured:!0,draft:!1,readTime:"7 min",content:` 8034Estamos animados em anunciar uma grande atualizacao do servidor Model Context Protocol (MCP) da Selent que melhora como equipes de rede interagem com a API do Cisco Meraki Dashboard. Esta atualizacao introduz duas novas capacidades: **busca semantica impulsionada por IA para descoberta de endpoints de API** e **suporte inteligente multi-chave para gerenciar multiplas organizacoes de clientes**. 8035 8036Para Provedores de Servicos Gerenciados e equipes de operacoes de rede gerenciando multiplas implantacoes Meraki, estas funcionalidades oferecem melhorias praticas para fluxos de trabalho diarios. Em vez de memorizar nomes de endpoints de API ou gerenciar instancias de integracao separadas para cada cliente, equipes agora podem usar consultas em linguagem natural e troca de contexto multi-organizacao perfeita-tudo atraves de uma unica instancia de servidor MCP. 8037 8038Este mergulho tecnico profundo explora como estas funcionalidades funcionam, a arquitetura que as alimenta e os beneficios praticos para seu fluxo de trabalho de operacoes de rede. 8039 8040## O Desafio: Encontrar o Endpoint de API Certo 8041 8042A API do Cisco Meraki Dashboard e abrangente, oferecendo mais de 816 endpoints atraves de organizacoes, redes, dispositivos, wireless, switching, appliances de seguranca, cameras e sensores. Esta amplitude e poderosa mas cria um desafio de descoberta: como voce encontra rapidamente o endpoint certo quando precisa realizar uma operacao de rede especifica? 8043 8044Abordagens tradicionais dependiam de correspondencia baseada em palavras-chave-exigindo que usuarios conhecessem terminologia exata e frequentemente retornando resultados irrelevantes. Se voce buscasse "device status", poderia obter endpoints para status de uplink de dispositivo, informacoes de dispositivo cliente ou status de gateway celular, sem indicacao clara de qual era mais relevante para sua intencao. 8045 8046Para equipes gerenciando multiplas organizacoes de clientes, o desafio era composto pela necessidade de configurar e gerenciar chaves de API separadas, manter mapeamentos organizacao-para-chave manualmente e arriscar chamar endpoints com o contexto de chave de API errado. 8047 8048## Busca Semantica: Descoberta de API em Linguagem Natural 8049 8050A ultima atualizacao do Selent MCP substitui correspondencia de palavras-chave por **busca semantica baseada em vetores**. Esta abordagem impulsionada por IA entende o *significado* por tras de suas consultas, nao apenas as palavras-chave. 8051 8052### Como Funciona 8053 8054Por baixo dos panos, Selent MCP agora aproveita: 8055 8056- **Qdrant**: Um banco de dados vetorial de alto desempenho rodando localmente dentro do servidor MCP 8057- **FastEmbed**: Um modelo de embedding eficiente (BAAI/bge-small-en-v1.5) que converte texto em vetores semanticos 8058- **Pontuacao Inteligente**: Um algoritmo de relevancia multi-fator que combina similaridade vetorial com boosting contextual 8059 8060Quando o servidor MCP inicia, automaticamente gera embeddings para todos os 816 endpoints de API Meraki, capturando tanto o nome do metodo quanto a descricao em um espaco vetorial pesquisavel. Quando voce submete uma consulta, o sistema: 8061 80621. Converte sua consulta em linguagem natural em uma representacao vetorial 80632. Realiza busca de similaridade contra todos os endpoints indexados 80643. Aplica boosting inteligente para correspondencias exatas, presenca de termos e simplicidade de metodo 80654. Retorna resultados ranqueados com scores de confianca 8066 8067### Antes e Depois 8068 8069**Antes (Correspondencia de Palavras-Chave)**: 8070\`\`\` 8071Consulta: "get device status" 8072Resultados: Tentativas de correspondencia de padrao, possiveis falsos positivos 8073Relevancia: ~30% taxa de precisao 8074\`\`\` 8075 8076**Depois (Busca Semantica)**: 8077\`\`\` 8078Consulta: "get device status" 8079Resultados: 8080 1. devices.getDevice (score: 0.87) - "Retorna um unico dispositivo" 8081 2. devices.getDeviceUplink (score: 0.74) - "Retorna info de uplink para dispositivo" 8082 3. devices.getOrganizationDevicesStatuses (score: 0.71) - "Lista status de todos dispositivos" 8083Relevancia: ~95% taxa de precisao 8084\`\`\` 8085 8086A abordagem semantica entende que "status" se relaciona a endpoints de informacao de dispositivo, e os ranqueia inteligentemente por relevancia para sua consulta especifica. 8087 8088### Consultas em Linguagem Natural 8089 8090O sistema lida com varios padroes de linguagem natural: 8091 8092- **Consultas diretas**: "get organizations", "list networks", "show device info" 8093- **Consultas baseadas em tarefas**: "check port configuration", "view firewall rules", "monitor client connections" 8094- **Consultas contextuais**: "device Q2XX-XXXX-XXXX port settings", "network security policies" 8095 8096Cada consulta retorna nao apenas nomes de endpoints, mas a secao (ex: \`switch\`, \`appli
8096ance\`, \`networks\`), nome do metodo (ex: \`getDeviceSwitchPort\`), uma descricao e requisitos de parametros-tudo que voce precisa para entender se e o endpoint certo para sua tarefa. 8097 8098### Beneficios Tecnicos 8099 81001. **Cobertura Abrangente**: Todos os 816 endpoints sao automaticamente indexados-nenhuma definicao de padrao manual necessaria 81012. **Livre de Manutencao**: Conforme Meraki adiciona novos endpoints de API, o script de regeneracao de colecao os descobre automaticamente 81023. **Desempenho Rapido**: Busca vetorial completa em <50ms para consultas tipicas 81034. **Execucao Local**: O modelo de embedding (33M parametros) roda localmente com overhead minimo 81045. **Baixo Armazenamento**: A colecao inteira indexada e apenas 2-5 MB 8105 8106## Suporte Multi-Chave: Gerenciando Multiplas Organizacoes de Clientes 8107 8108Para Provedores de Servicos Gerenciados, um desafio operacional comum e gerenciar infraestrutura de rede atraves de multiplas organizacoes de clientes, cada uma com sua propria chave de API do Meraki Dashboard. Anteriormente, isso exigia rodar instancias de servidor MCP separadas ou trocar contextos manualmente-ambos propensos a erros e ineficientes. 8109 8110A nova funcionalidade de suporte multi-chave aborda este desafio de fluxo de trabalho habilitando um **unico servidor MCP para gerenciar multiplas chaves de API** e automaticamente resolver qual chave usar baseado no contexto organizacional. 8111 8112### Configuracao 8113 8114Configurar modo multi-chave e simples. Em vez de fornecer uma unica chave de API, voce fornece uma lista separada por virgulas: 8115 8116**Configuracao Simples** (chaves sem nome): 8117\`\`\`bash 8118MERAKI_API_KEY="key1,key2,key3" 8119\`\`\` 8120 8121**Configuracao com Rotulos** (recomendado para MSPs): 8122\`\`\`bash 8123MERAKI_API_KEY="cliente_a:abc123...,cliente_b:def456...,cliente_c:ghi789..." 8124\`\`\` 8125 8126O formato rotulado permite atribuir nomes amigaveis a cada chave, facilitando identificar qual chave corresponde a qual cliente em logs e ferramentas de gerenciamento. 8127 8128### Resolucao Inteligente de Chave 8129 8130Quando voce executa uma chamada de API que requer contexto de organizacao, o sistema automaticamente determina qual chave de API usar atraves de um algoritmo de resolucao baseado em prioridade: 8131 81321. **ID de Chave Explicito**: Se voce especificar um parametro \`key_id\`, essa chave e usada 81332. **Mapeamento de Organizacao**: Se voce fornecer um \`organizationId\`, o sistema busca qual chave tem acesso a essa organizacao 81343. **Padrao de Sessao**: Se voce definiu uma chave padrao para a sessao atual, ela e usada 81354. **Primeira Chave Configurada**: Volta para a primeira chave em sua configuracao 8136 8137Esta resolucao inteligente significa que voce pode escrever consultas naturais como: 8138 8139\`\`\` 8140"Mostre-me todas as redes na organizacao 123456" 8141\`\`\` 8142 8143O sistema automaticamente determina que organizacao 123456 pertence a chave de API do cliente_b e roteia a requisicao adequadamente-nenhuma selecao manual de chave necessaria. 8144 8145## Beneficios do Mundo Real para MSPs e Equipes de Rede 8146 8147Estas capacidades tecnicas se traduzem em melhorias operacionais concretas: 8148 8149### Para Provedores de Servicos Gerenciados 8150 8151**Gerenciamento em Painel Unico**: Em vez de manter instancias de servidor MCP separadas ou setups de integracao para cada cliente, MSPs podem implantar um servidor Selent MCP que lida inteligentemente com todos os contextos de clientes. 8152 8153**Reducao de Troca de Contexto**: Ao abordar um problema de cliente, simplesmente referencie seu ID ou nome de organizacao-o sistema automaticamente usa a chave de API correta. Nenhuma busca manual de chave ou mudancas de configuracao necessarias. 8154 8155**Prevencao de Erros**: Resolucao automatica de chave ajuda a evitar executar chamadas de API com a chave de API errada, o que pode resultar em erros 404 ou acessar dados da organizacao errada. 8156 8157**Eficiencia Operacional**: Operacoes em lote atraves de multiplos clientes se tornam simples-itere atraves de organizacoes e deixe o sistema lidar com resolucao de chave automaticamente. 8158 8159### Para Engenheiros de Rede 8160 8161**Descoberta de API Mais Rapida**: Em vez de buscar documentacao ou memorizar nomes de endpoints, descreva o que voce precisa em linguagem natural e imediatamente obtenha os endpoints relevantes com scores de confianca. 8162 8163**Carga Cognitiva Reduzida**: A busca semantica lida com o mapeamento de "o que eu quero fazer" para "qual endpoint de API faz isso", permitindo que engenheiros foquem em operacoes de rede em vez de mecanica de API. 8164
8165**Amigavel para Exploracao**: Quando incerto do endpoint exato, busca semantica retorna opcoes relacionadas, ajudando engenheiros a descobrir capacidades que podem nao saber que existiam. 8166 8167--- 8168 8169*Selent MCP esta disponivel em [github.com/selent-ai/selent-mcp](https://github.com/selent-ai/selent-mcp). Para perguntas, feedback ou suporte, entre em contato com nossa equipe ou abra uma issue no GitHub.* 8170`},{slug:"customer-feedback-shapes-selent",title:"Ouvindo, Aprendendo e Lancando: Como o Feedback de Clientes Molda a Evolucao da Selent",excerpt:"Por tras de cada nova capacidade que construimos ha um problema do mundo real, observado e validado junto as pessoas que gerenciam ambientes de rede todos os dias. Descubra como o feedback de clientes se transformou em nossa atualizacao mais impactante ate agora.",date:"2025-10-17",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Produto",tags:["CustomerFeedback","ProductDevelopment","NetworkAutomation","CiscoMeraki","MassDeployment","ConfigurationManagement","AIOps"],coverImage:"/selent-feedback-loop.png",featured:!0,draft:!1,readTime:"4 min",content:` 8171No ambiente atual de operacoes de rede, o ritmo da mudanca e implacavel. Organizacoes estao conectando mais dispositivos, usuarios e servicos do que nunca, enquanto a expectativa de uptime e seguranca permanece absoluta. No entanto, por tras de cada configuracao, atualizacao de firmware ou ajuste de topologia, ha um desafio crescente: como executar mudancas rapida e seguramente, sem depender de processos manuais propensos a erros. 8172 8173Equipes modernas de TI e NOC conhecem bem esta realidade. Uma unica porta de switch mal configurada ou uma regra de VLAN inconsistente pode cascatear em interrupcoes, violacoes de conformidade ou perda de produtividade. A medida que redes crescem em complexidade-abrangendo nuvens hibridas, sites distribuidos e endpoints IoT-a necessidade de gerenciamento de configuracao automatizado, auditavel e consistente se tornou essencial. Neste contexto, automacao nao e apenas economia de tempo; e a base da excelencia operacional. 8174 8175Na Selent, adotamos esta filosofia desde o inicio. Nossa missao sempre foi transformar o feedback do campo-de engenheiros, parceiros e provedores de servicos-em solucoes praticas e inteligentes que melhorem as operacoes diarias de rede. Cada nova capacidade que construimos comeca com um problema do mundo real, observado e validado junto as pessoas que gerenciam estes ambientes todos os dias. 8176 8177## Convertendo Feedback em Acao 8178 8179Quando lancamos o backup e restore impulsionado por IA da Selent para Cisco Meraki, rapidamente percebemos que nossos usuarios nao buscavam apenas resiliencia-queriam velocidade, padronizacao e controle em escala. Uma das perguntas mais frequentes de nossos clientes e parceiros foi: 8180 8181**"Podemos aplicar configuracoes consistentes de portas de switch atraves de multiplas redes-instantanea e seguramente?"** 8182 8183Essa solicitacao simples mas poderosa se tornou o blueprint de uma de nossas atualizacoes mais impactantes ate o momento. Apos meses de colaboracao, testes e iteracao com nosso ecossistema de parceiros global, estamos orgulhosos de introduzir uma nova capacidade que redefine como equipes gerenciam ambientes Meraki em grande escala. 8184 8185## Deploy em Massa de Configuracoes de Portas de Switch - Com Apenas Um Clique 8186 8187A nova funcionalidade permite que administradores: 8188 8189- **Selecionem um template de configuracao predefinido.** 8190- **Apliquem-no a centenas de switches simultaneamente, atraves de uma ou multiplas redes.** 8191- **Validem resultados automaticamente** - garantindo que cada mudanca seja aplicada de forma segura e consistente. 8192 8193Isso significa que equipes de TI agora podem aplicar configuracoes padronizadas de VLAN, politicas de seguranca ou configuracoes de PoE em toda sua infraestrutura em segundos. Ao eliminar trabalho manual repetitivo, Selent reduz drasticamente o risco de erro humano e acelera cronogramas de deploy-tudo enquanto mantem visibilidade e controle completos atraves de nossos fluxos de trabalho seguros e auditaveis. 8194 8195## Projetado com Parceiros, para Parceiros 8196 8197Nossos Parceiros Tecnologicos e Provedores de Servicos Gerenciados foram parte integral desta jornada. Seus insights de gerenciar ambientes multi-tenant nos ajudaram a garantir que esta funcionalidade nao apenas escale tecnicamente, mas tambem se alinhe com praticas o
8197peracionais do mundo real-desde deploy e relatorio de conformidade ate gerenciamento de niveis de servico. Este modelo de colaboracao esta no coracao de como Selent evolui: co-criando com aqueles que vivem e respiram operacoes de rede todos os dias. 8198 8199## O Que Vem a Seguir 8200 8201A capacidade de deploy em massa marca um passo importante em direcao a visao mais ampla da Selent de automacao agentica-onde agentes impulsionados por IA lidam com verificacoes de conformidade, monitoramento de saude, remediacao de configuracao e insights preditivos perfeitamente atraves do ecossistema Meraki. 8202 8203Atualizacoes futuras estenderao a mesma eficiencia de "um clique" para areas de configuracao adicionais e fluxos de trabalho de automacao, garantindo que Selent permaneca a camada inteligente entre intencao operacional e execucao de rede. 8204 8205Porque quando nossos clientes e parceiros compartilham seus desafios, nao apenas ouvimos-construimos solucoes juntos. 8206 8207## Descubra a nova funcionalidade hoje 8208 8209Faca login em [selent.ai](https://selent.ai) e explore o novo modulo de Deploy em Massa em seu dashboard. Experimente como um clique pode tornar o gerenciamento de configuracao mais rapido, seguro e inteligente. 8210`},{slug:"securing-ai-network-automation",title:"Como Proteger Automacao de Rede Impulsionada por IA: Melhores Praticas e Ameacas Emergentes",excerpt:"Automacao impulsionada por IA pode detectar anomalias mais rapido e executar mudancas de configuracao em segundos. Mas a mesma automacao que acelera operacoes tambem pode amplificar riscos se deixada sem controle. Aprenda como construir automacao segura e inteligente para sua infraestrutura de rede.",date:"2025-10-09",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Seguranca",tags:["AI","NetworkSecurity","CyberSecurity","AIOps","CiscoMeraki","ZeroTrust","Compliance","NetworkAutomation"],coverImage:"/networking_ai_automation.png",featured:!0,draft:!1,readTime:"6 min",content:` 8211A medida que inteligencia artificial remodela como redes sao gerenciadas, monitoradas e otimizadas, um novo desafio emerge silenciosamente em paralelo: como manter esses sistemas inteligentes seguros. 8212 8213Automacao impulsionada por IA pode detectar anomalias mais rapido, prever falhas antes que acontecam e executar mudancas de configuracao em segundos. Mas a mesma automacao que acelera operacoes tambem pode amplificar riscos se deixada sem controle. Um unico modelo falho, dataset envenenado ou instrucao nao autorizada poderia empurrar configuracoes erroneas atraves de centenas de sites em segundos. 8214 8215Na Selent, acreditamos que a proxima evolucao das operacoes de rede depende nao apenas de automacao inteligente, mas de **automacao segura**. 8216 8217## Novas Ameacas na Era das Redes com IA 8218 8219Seguranca de rede tradicional focava em endpoints, credenciais e defesas de perimetro. IA introduz uma camada adicional de risco: 8220 8221### Envenenamento de Dados 8222Atacantes manipulam os dados de treinamento ou feedback usados por modelos, levando a predicoes erradas ou automacao insegura. Em contextos de automacao de rede, isso poderia significar gradualmente introduzir padroes que a IA aprende como "normais" mas sao na verdade prejudiciais. 8223 8224### Manipulacao de Modelos 8225A logica da IA em si pode ser adulterada, produzindo acoes tendenciosas ou inseguras. Quando o modelo que decide quais configuracoes aplicar esta comprometido, cada decisao se torna suspeita. 8226 8227### Injecao de Prompt e Uso Indevido de Comandos 8228Quando IA recebe instrucoes em linguagem natural, prompts maliciosos ou ambiguos poderiam acionar comportamento nao intencional. Um atacante com acesso limitado poderia criar prompts que enganam a IA para revelar informacoes sensiveis ou fazer mudancas nao autorizadas. 8229 8230### Misconfiguracao Automatizada 8231Um bug ou padrao mal aprendido poderia replicar um erro em escala, mais rapido do que qualquer operador humano poderia intervir. O que levaria horas para propagar manualmente pode acontecer em toda sua infraestrutura em segundos. 8232 8233### Tomada de Decisao Opaca 8234Quando modelos agem como "caixas pretas", e dificil auditar por que uma mudanca foi feita-ou reverter com confianca. Sem transparencia n
8234o raciocinio da IA, troubleshooting se torna adivinhacao. 8235 8236## Melhores Praticas para Proteger Automacao Impulsionada por IA 8237 8238Proteger sistemas de IA em redes requer uma abordagem em multiplas camadas. Aqui estao os principios que guiam nosso design na Selent e que toda organizacao deveria adotar: 8239 8240### 1. Arquitetura Zero-Trust para Agentes de IA 8241 8242Trate cada componente de IA-modelos, APIs e conectores-como nao confiavel por padrao. Aplique autenticacao e autorizacao granulares, garantindo que cada agente so possa acessar os recursos que realmente precisa. 8243 8244**Na pratica:** 8245- Implemente controles de acesso baseados em funcao para sistemas de IA 8246- Use autorizacao consciente de contexto (tempo, escopo, padroes historicos) 8247- Segmente sistemas de IA por limites de rede-um comprometimento em uma area nao deveria afetar toda infraestrutura 8248 8249### 2. Governanca de Modelos e Controle de Versao 8250 8251Mantenha versionamento estrito de modelos de IA e suas configuracoes. Cada atualizacao deveria ser rastreavel, testada em ambientes sandbox e assinada digitalmente antes da implantacao. 8252 8253**Acoes-chave:** 8254- Rastreie todas as mudancas de modelo em controle de versao 8255- Exija testes em ambientes isolados antes de producao 8256- Implemente assinatura criptografica para implantacoes de modelo 8257- Mantenha capacidades de rollback para recuperacao rapida 8258 8259### 3. Integridade de Dados e Proveniencia 8260 8261Rastreie de onde cada dataset vem e quem o modificou. Implemente camadas de validacao que detectam anomalias ou padroes injetados antes que influenciem modelos de producao. 8262 8263**Implementacao:** 8264- Verifique criptograficamente fontes de dados de treinamento 8265- Monitore padroes incomuns em feeds de dados 8266- Estabeleca linhas de base para caracteristicas normais de dados 8267- Alerte sobre desvios que poderiam indicar tentativas de envenenamento 8268 8269### 4. Supervisao Humana no Loop 8270 8271Mesmo em ambientes autonomos, acoes criticas-como mudancas de configuracao em larga escala ou rollbacks-deveriam exigir revisao ou aprovacao humana. Automacao deveria aumentar, nao substituir, responsabilidade. 8272 8273**Principios de design:** 8274- Defina limites claros para acao autonoma 8275- Exija aprovacao humana para mudancas de alto impacto 8276- Forneca capacidades de override e shutdown de emergencia 8277- Garanta que IA possa explicar suas decisoes antes de agir 8278 8279### 5. Monitoramento Continuo e Deteccao de Anomalias 8280 8281Implante IA para observar IA. Agentes de meta-monitoramento podem identificar desvios no comportamento do modelo, drift na precisao ou padroes de trafego inesperados resultantes de decisoes de IA. 8282 8283**Estrategia de monitoramento:** 8284- Rastreie metricas de desempenho de IA ao longo do tempo 8285- Alerte sobre mudancas comportamentais em sistemas de IA 8286- Monitore padroes de decisao para anomalias 8287- Mantenha logs de auditoria abrangentes 8288 8289### 6. Auditabilidade e Explicabilidade 8290 8291Cada acao automatizada deve ser explicavel e auditavel. Logs, diffs semanticos e rastreamentos de decisao permitem que equipes entendam o que aconteceu, por que e quando. 8292 8293**Requisitos:** 8294- Mantenha logs detalhados de todas as decisoes de IA 8295- Forneca explicacoes claras para mudancas 8296- Rastreie inputs, raciocinio e outputs 8297- Habilite analise forense quando problemas surgirem 8298 8299## A Perspectiva Selent: Seguro por Design 8300 8301Na Selent, seguranca nao e uma reflexao tardia-esta embutida em nossa arquitetura. 8302 8303Nossos Agentes de Backup & Restore e Conformidade ja operam sob principios zero-trust, com backups criptografados, chamadas de API com escopo de acesso e diffs rastreaveis que mostram cada mudanca em linguagem simples. 8304 8305A medida que evoluimos para operacoes de rede autonomas, nosso objetivo e claro: empoderar equipes de TI e NetOps com automacao inteligente que e preditiva, explicavel e inerentemente segura. 8306 8307### Como Implementamos Seguranca 8308 8309**Zero-Trust desde a Base**: Cada agente Selent opera com permissoes minimas necessarias. Acesso a API e precisamente limitado ao que e necessario para cada operacao. 8310 8311**Tudo Criptografado**: Todos os backups sao criptografados em repouso e em transito. Dados de configuracao sao protegidos com padroes de criptografia de nivel empresarial. 8312 8313**Mudancas Transparentes**: Nossa tecnologia de diff semantico traduz mudancas de configuracao em linguagem simples, facilitando entender exatamente o que mudou e por que. 8314 8315**Trilhas de Auditoria**: Cada acao e registrada com contexto completo-quem solicitou, quando aconteceu, o que mudou e o raciocinio por tras. 8316
8317**Supervisao Humana**: Operacoes criticas podem ser configuradas para exigir aprovacao explicita, garantindo que humanos permanecam no controle de decisoes importantes. 8318 8319## O Que Vem a Seguir 8320 8321IA continuara impulsionando eficiencia e resiliencia em infraestrutura moderna-mas apenas se for construida sobre uma base de confianca. 8322 8323Organizacoes que combinam velocidade de automacao com disciplina de seguranca liderarao a proxima geracao de gerenciamento de rede. 8324 8325A questao nao e se adotar automacao de IA-e como adota-la com seguranca. Ao avaliar plataformas e construir sua estrategia de automacao, priorize: 8326 8327- **Transparencia**: Escolha solucoes onde voce pode entender e auditar decisoes de IA 8328- **Controle**: Garanta que voce pode sobrescrever, parar ou reverter acoes de IA quando necessario 8329- **Seguranca-por-design**: Procure plataformas construidas com principios de seguranca desde a base 8330- **Praticas comprovadas**: Adote zero-trust, monitoramento continuo e supervisao humana 8331 8332Se voce gostaria de explorar como integrar IA com seguranca em seu stack de rede, [entre em contato](https://selent.ai/contact) ou [agende uma demo](https://selent.ai/demo) com nossa equipe em selent.ai. 8333 8334--- 8335 8336*O futuro das operacoes de rede e inteligente e automatizado. Garanta que tambem seja seguro.* 8337`},{slug:"ai-agents-network-operations",title:"Alem de Backup e Restore: Usando Agentes de IA para Transformar Operacoes de Rede",excerpt:"Backup, restore e checklists de conformidade mantem voce pronto para auditoria, mas nao vao parar a proxima interrupcao. Descubra como agentes de IA preveem e previnem problemas em redes Cisco Meraki antes que usuarios percebam.",date:"2025-09-17",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"AIOps",tags:["AIOps","CiscoMeraki","NetworkAutomation","Compliance","AI"],coverImage:"https://images.unsplash.com/photo-1544197150-b99a580bb7a8?q=80&w=1974&auto=format&fit=crop&ixlib=rb-4.1.0",featured:!0,draft:!1,readTime:"6 min",content:` 8338Sao 3:12 da manha e seu engenheiro de plantao esta olhando para mais um alerta urgente. O job de backup foi bem-sucedido, relatorios de conformidade estao organizados, e o monitoramento acabou de sinalizar um pico de latencia que ja esta impactando usuarios. Quando a causa raiz e encontrada, o dano ja esta feito. Em 2025, playbooks reativos sao lentos demais para ambientes Cisco Meraki hibridos e distribuidos que mudam centenas de vezes por dia. 8339 8340Fluxos de trabalho de backup, restore e conformidade sao fundamentais-mantem auditores tranquilos e dao as equipes seguro quando as coisas dao errado. Mas permanecer competitivo agora exige algo mais: inteligencia proativa que preve, previne e resolve problemas antes que se tornem interrupcoes. Essa e a promessa de agentes impulsionados por IA como Selent Agent. 8341 8342## Por Que Backup, Restore e Conformidade Sozinhos Nao Bastam 8343 8344A maioria das equipes Meraki depende de tres pilares centrais: 8345 8346- **Backup & Restore** garante que voce possa reverter de erro humano, falha de dispositivo ou incidentes maiores. 8347- **Conformidade** satisfaz reguladores, politicas internas e frameworks de seguranca. 8348- **Monitoramento & Alertas** surfam problemas quando limites sao violados ou logs mostram anomalias. 8349 8350Todos os tres importam-mas sao inerentemente reativos. Voce ve um problema, depois responde. Em redes de alta velocidade, esse atraso cria risco de negocio: 8351 8352- Custos de inatividade media **$9.000 por minuto** para empresas de medio porte. 8353- 58% das mudancas de rede sao atrasadas porque equipes temem introduzir novos problemas. 8354- Investigacoes manuais esticam Tempo Medio para Reparo (MTTR) para horas em vez de minutos. 8355 8356Organizacoes que querem permanecer resilientes precisam de sistemas que observam continuamente, aprendem de cada sinal e tomam acao inteligente no momento em que risco aparece. 8357 8358## Entram os Agentes de IA para Operacoes de Rede 8359 8360Agentes de IA combinam automacao, observabilidade e inteligencia de maquina para gerenciar redes com intervencao humana minima. Quando combinados com telemetria Meraki, desbloqueiam novas capacidades: 8361 8362| Capacidade | Abordagem Tradicional | Abordagem Aprimorada por Agente de IA | 8363| --- | --- | --- | 8364| Deteccao em tempo real | Alertas disparam apos limites serem cruzados | Prever anomalias emergentes antes de limites dispararem | 8365| Remediacao automatizada | Engenheiros investigam e executam correcoes manualmente | Agentes iniciam respostas pre-aprovadas (reiniciar servicos, redirecionar trafego) | 8366| Desvio de configuracao | Auditorias periodicas capturam lacunas apos o fato | Deteccao continua de desvio com auto-correcoes seguras | 8367| Escala e capacidade | Planos dependem de uso historico e suposicoes | Previsao de demanda com orientacao proativa de escala |
8368| Resposta de seguranca | Incidentes tratados apos indicacoes de comprometimento | Predicao de ameacas e politicas de contencao automatizadas | 8369| Eficiencia operacional | Equipes perdem horas combatendo problemas repetitivos | Menor MTTR, menos tarefas manuais e maior confiabilidade | 8370 8371Em vez de esperar alertas vermelhos, agentes de IA mantem operacoes em estado constante de otimizacao. 8372 8373## Como Selent Agent Eleva Redes Cisco Meraki 8374 8375Selent Agent foi construido com proposito para conectar a APIs e streams de telemetria Meraki, transformando dados brutos em inteligencia acionavel. 8376 8377### Observabilidade e Insight Continuos 8378Selent ingere continuamente eventos de dispositivos, metricas de desempenho e mudancas de topologia. Aprende como e o "normal" para cada site, depois identifica desvios ou riscos de desempenho muito antes que usuarios percebam. O resultado: aviso antecipado sobre degradacao de servico, nao apenas luzes vermelhas apos o fato. 8379 8380### Remediacao Proativa e Tratamento de Alertas 8381Quando anomalias aparecem, o agente pode notificar engenheiros mais cedo ou executar runbooks automatizados para cenarios aprovados. Pense em failovers de VPN automatizados, ajustes de politica ou rollbacks de configuracao executados em minutos-nao horas. 8382 8383### Automacao de Politica e Conformidade 8384Conformidade deixa de ser uma tarefa trimestral. Selent Agent valida configuracoes contra politicas internas e frameworks externos em tempo real, sinaliza desvios instantaneamente e pode corrigir os faceis automaticamente. Voce fica pronto para auditoria todos os dias, nao apenas na epoca de auditoria. 8385 8386### Deteccao de Anomalias e Analiticas de Causa Raiz 8387Em vez de jogar alertas por cima do muro, o agente explica por que algo deu errado. Correlaciona mudancas recentes, servicos dependentes e incidentes historicos para surfar causas raiz provaveis. Engenheiros pulam direto para resolucao em vez de perseguir pistas cegas. 8388 8389### Implantacao Escalavel e Governanca 8390Seja gerenciando 10 locais ou 1.000, Selent Agent aplica linhas de base consistentes em todo o estate Meraki. Equipes definem guardrails uma vez, depois deixam agentes gerenciarem execucao e relatorios do dia-a-dia. 8391 8392## Resultados de Negocio Que Voce Pode Esperar 8393 8394Organizacoes implantando Selent Agent relatam resultados que se estendem muito alem de operacoes de TI: 8395 8396- **Reducao de tempo de inatividade e recuperacao mais rapida** gracas a deteccao preditiva e remediacao automatizada. 8397- **Eficiencia operacional** conforme equipes mudam de triagem de tickets para projetos estrategicos. 8398- **Postura de seguranca mais forte** com conformidade continua e aplicacao de politicas em tempo real. 8399- **Custos operacionais menores** impulsionados por menos incidentes, uso otimizado de recursos e menos trabalho manual. 8400- **Consistencia escalavel** que mantem projetos de expansao no cronograma sem sacrificar padroes. 8401 8402## O Que Avaliar Antes de Implantar Agentes de IA 8403 8404Automacao de IA e poderosa, mas precisa dos guardrails certos. Seu checklist deve incluir: 8405 8406- **Acesso a dados e integracoes:** Confirme que o agente pode ingerir telemetria Meraki, logs e dados de nuvem relacionados. 8407- **Redes de seguranca e overrides:** Exija aprovacoes, rollbacks ou implantacoes em fases para acoes de alto impacto. 8408- **Transparencia:** Exija logs de atividade e recomendacoes explicaveis para que equipes possam confiar nos resultados. 8409- **Alinhamento regulatorio:** Garanta que automacao respeite requisitos de privacidade, retencao e controle de mudancas. 8410- **Customizacao de politicas:** Mapeie acoes do agente para os padroes unicos e apetite de risco da sua organizacao. 8411- **Momentum do vendor:** Procure roadmap ativo, adocao rapida de novas fontes de telemetria e suporte responsivo. 8412 8413## Seus Primeiros 30 Dias com Selent Agent 8414 84151. **Semana 1 â Linha de Base:** Conecte orgs Meraki chave, importe politicas e benchmarke MTTR atual e volume de incidentes.
84162. **Semana 2 â Observe:** Execute agentes em "modo recomendacao" para ver insights sem acao automatizada. 84173. **Semana 3 â Automatize com Seguranca:** Ligue auto-remediacao para cenarios de baixo risco (ex: correcoes de desvio de config). 84184. **Semana 4 â Expanda:** Adicione aplicacao de conformidade, construa dashboards de lideranca e documente vitorias iniciais para stakeholders. 8419 8420Dentro de um mes, a maioria das equipes ve menos escalacoes noturnas, relatorios de conformidade mais limpos e reducoes mensuraveis de MTTR. 8421 8422## O Resultado Final 8423 8424Fluxos de trabalho de backup, restore e conformidade permanecem essenciais-sao a rede de seguranca que todo ambiente Meraki precisa. Mas redes modernas exigem mais do que seguro reativo. Agentes de IA como Selent Agent entregam observabilidade continua, remediacao proativa e a confianca de que suas operacoes permanecerao resilientes conforme seu estate cresce. 8425 8426Se sua equipe ainda passa noites vasculhando logs de backup ou perseguindo alertas depois que clientes reclamam, e hora de ir alem de checklists. Vamos transformar operacoes de rede em uma vantagem proativa. 8427 8428[Solicite uma demo](https://c87b31wu7aq.typeform.com/to/UuTqiop3) para ver como Selent Agent pode transformar seu ambiente Meraki de reativo para auto-otimizante. 8429`},{slug:"selent-agent-aiops-cisco-meraki",title:"Apresentando Selent Agent: Agentes de IA Especializados para Operacoes Cisco Meraki",excerpt:"Implante agentes especializados que continuamente analisam, monitoram e otimizam suas redes Meraki-entregando insights automatizados e remediacao guiada quando problemas surgem.",date:"2025-09-09",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Produto",tags:["AIOps","NetworkAutomation","CiscoMeraki","AI","NetworkMonitoring","Compliance"],coverImage:"https://images.unsplash.com/photo-1597733336794-12d05021d510?q=80&w=1974&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D",featured:!0,draft:!1,readTime:"8 min",content:` 8430Gerenciar redes Cisco Meraki em escala requer vigilancia constante. Equipes de rede monitoram centenas de metricas, rastreiam requisitos de conformidade e respondem a problemas em locais distribuidos-frequentemente simultaneamente. E um trabalho complexo que demanda expertise profunda e disponibilidade imediata. 8431 8432Hoje, estamos apresentando Selent Agent: um conjunto de agentes de IA especializados que trabalham ao lado de sua equipe para continuamente analisar, monitorar e otimizar sua infraestrutura Meraki. 8433 8434## O Desafio de Escala em Operacoes de Rede 8435 8436Empresas modernas dependem de suas redes para tudo. Quando problemas surgem, o impacto se propaga pela organizacao-de perdas de produtividade a impactos na receita. No entanto, equipes de rede estao esticadas, gerenciando ambientes cada vez mais complexos com recursos limitados. 8437 8438A abordagem tradicional de monitoramento manual e resposta reativa cria varios problemas: 8439 8440- Problemas criticos frequentemente passam despercebidos ate usuarios reclamarem 8441- Equipes perdem tempo investigando falsos positivos 8442- Verificacoes de conformidade acontecem esporadicamente, criando janelas de risco 8443- Lacunas de conhecimento emergem quando membros-chave da equipe nao estao disponiveis 8444 8445E se voce pudesse ter especialistas dedicados continuamente observando sua rede, analisando padroes e fornecendo insights acionaveis? 8446 8447## Conheca Sua Equipe de Agentes Especializados 8448 8449Selent Agent adota uma abordagem focada para inteligencia de rede. Em vez de tentar resolver tudo com uma ferramenta, desenvolvemos agentes especializados que se destacam em aspectos especificos de operacoes de rede: 8450 8451### Agente de Analise de Rede 8452Este agente examina continuamente sua topologia de rede, padroes de trafego e configuracoes de dispositivos. Ele entende os relacionamentos entre componentes e pode identificar problemas que podem nao ser obvios a partir de metricas individuais. 8453 8454Quando algo da errado-como um dispositivo ficando offline-o Agente de Analise de Rede nao apenas alerta voce. Ele fornece contexto sobre o que esta acontecendo, causas potenciais e o impacto mais amplo em sua rede. 8455 8456### Agente de Conformidade 8457Manter conformidade nao e uma atividade unica-e um requisito continuo. O Agente de Conformidade monitora continuamente suas configuracoes contra suas politicas de seguranca e requisitos regulatorios. 8458 8459Em vez de correr durante a temporada de auditoria, voce tem visibilidade
8459continua em sua postura de conformidade. O agente sinaliza desvios imediatamente e fornece etapas especificas de remediacao para trazer configuracoes de volta a conformidade. 8460 8461### Agente de Saude 8462Saude da rede vai alem de simples status up/down. O Agente de Saude rastreia desempenho de dispositivos, utilizacao de recursos e fatores ambientais para identificar problemas potenciais antes que impactem operacoes. 8463 8464Ao analisar tendencias ao longo do tempo, pode prever quando dispositivos podem falhar ou quando problemas de capacidade podem emergir, dando a voce tempo para abordar problemas proativamente. 8465 8466### Agente de Monitoramento 8467O Agente de Monitoramento fornece visibilidade em tempo real no status da rede em todos os seus locais. Mas diferente do monitoramento tradicional que inunda voce com alertas, ele aprende o comportamento normal da sua rede para reduzir dramaticamente falsos positivos. 8468 8469Ele entende quais problemas sao criticos e quais podem esperar, garantindo que sua equipe foque no que mais importa. 8470 8471## Como Funciona na Pratica 8472 8473Vamos ver como Selent Agent transforma operacoes do dia-a-dia: 8474 8475### Analise Agendada 8476Voce seleciona redes especificas e agenda agentes para rodar automaticamente em segundo plano. Escolha verificacoes de saude diarias, auditorias de conformidade semanais ou monitoramento continuo-o que combinar com suas necessidades operacionais. 8477 8478### Relatorios Automatizados 8479Quando agentes completam suas analises, voce recebe relatorios detalhados por email. Estes nao sao atualizacoes de status genericas-sao insights acionaveis especificos para seu ambiente, destacando o que precisa de atencao e por que. 8480 8481### Contexto Historico 8482Cada analise e registrada e acessivel atraves da plataforma. Voce pode rastrear tendencias ao longo do tempo, entender problemas recorrentes e demonstrar conformidade atraves de trilhas de auditoria abrangentes. 8483 8484### Resolucao Interativa de Problemas 8485Aqui e onde fica interessante. Quando um agente identifica um problema, voce nao recebe apenas um alerta-voce pode ter uma conversa com aquele agente especializado para entender o problema e explorar solucoes. 8486 8487## Um Exemplo Real: Da Deteccao a Resolucao 8488 8489Deixe-me mostrar como isso funciona com um cenario real que encontramos: 8490 8491O Agente de Analise de Rede detectou um dispositivo offline em uma de nossas redes monitoradas. Mas nao parou na deteccao. O agente analisou o contexto da rede e identificou que este nao era qualquer dispositivo-era um switch critico afetando multiplas conexoes downstream. 8492 8493Atraves da interface conversacional, a equipe pode fazer perguntas: 8494- "Qual e o impacto desta interrupcao?" 8495- "Quais sao as possiveis causas?" 8496- "Qual e a remediacao recomendada?" 8497 8498O agente forneceu orientacao especifica baseada na topologia de rede e mudancas recentes. A equipe foi ao dashboard Meraki, implementou a correcao e observou enquanto o dispositivo voltou online e metricas retornaram ao normal. 8499 8500O que tradicionalmente poderia ter levado horas de investigacao foi resolvido em minutos. 8501 8502## O Valor da Inteligencia Especializada 8503 8504### Profundidade Sobre Amplitude 8505Cada agente e construido com proposito para seu dominio. O Agente de Conformidade entende frameworks regulatorios e melhores praticas de seguranca. O Agente de Saude conhece linhas de base de desempenho e padroes de falha. Esta especializacao significa analise mais precisa e melhores recomendacoes. 8506 8507### Cobertura Continua 8508Agentes trabalham 24/7, fornecendo cobertura quando sua equipe nao esta disponivel. Problemas de fim de semana nao esperam ate segunda-feira. Problemas noturnos sao detectados imediatamente. Sua rede recebe a atencao que merece o tempo todo. 8509 8510### Preservacao de Conhecimento 8511Cada interacao com agentes constroi conhecimento institucional. Novos membros da equipe podem aproveitar a mesma expertise especializada que veteranos. Quando alguem sai, seu conhecimento nao sai pela porta. 8512 8513### Proativo vs. Reativo 8514Em vez de esperar problemas impactarem usuarios, agentes identificam problemas cedo. Eles identificam tendencias, preveem falhas e recomendam otimizacoes. Sua equipe muda de combater incendios para preveni-los. 8515 8516## Integracao com Seu Fluxo de Trabalho Existente 8517 8518### Funciona com Meraki Dashboard 8519Selent Agent nao substitui seu dashboard Meraki-ele aprimora. Voce ainda usa a interface familiar do Meraki para configuracao e gerenciamento. Agentes fornecem a camada de inteligencia que guia suas acoes. 8520 8521### Agendamento Flexivel 8522Execute agentes em seu cronograma. Verificacoes de saude diarias para redes criticas. Auditorias de conformidade semanais para ambientes regulados. Monitoramento continuo para sites com requisitos de alta disponibilidade. 8523 8524### Acesso por Email e Plataforma 8525Receba relatorios onde quiser. Email entrega insights diretamente em sua caixa de entrada. A plataforma fornece contexto historico e analise de tendencias. Escolha o que funciona para seu fluxo de trabalho. 8526 8527### Integracao via API 8528Para organizacoes com automacao existente, Selent Agent fornece acesso via API a resultados de agentes e insights. Integre com seu sistema de tickets, SIEM ou plataforma de automacao. 8529 8530## Comecando 8531 8532### Comece Pequeno 8533Comece com um agente em suas redes mais criticas. Veja o valor antes de expandir cobertura. A maioria das equipes comeca com o Agente de Monitoramento para visibilidade imediata ou o Agente de Conformidade para preparacao de auditoria. 8534 8535### Construa Confianca 8536Conforme voce ve resultados, expanda cobertura. Adicione mais redes. Implante agentes adicionais. Aumente automacao. A plataforma cresce com sua confianca e necessidades. 8537 8538### Meca Impacto 8539Rastreie metricas que importam: 8540- Tempo de deteccao de incidentes 8541- Velocidade de resolucao 8542- Pontuacoes de conformidade
8543- Produtividade da equipe 8544 8545A maioria das organizacoes ve melhorias mensuraveis dentro do primeiro mes. 8546 8547## O Elemento Humano 8548 8549Vale enfatizar: Selent Agent nao substitui engenheiros de rede. Ele amplifica suas capacidades. 8550 8551Agentes lidam com analise rotineira, monitoramento continuo e investigacao inicial. Engenheiros focam em decisoes estrategicas, resolucao complexa de problemas e otimizacao de rede. E sobre fazer mais com a mesma equipe, nao substituir expertise humana. 8552 8553A interface conversacional significa que engenheiros podem aproveitar inteligencia de agentes enquanto aplicam seu julgamento e experiencia. E uma parceria onde IA lida com analise de dados e reconhecimento de padroes enquanto humanos tomam decisoes e implementam solucoes. 8554 8555## Olhando Adiante 8556 8557Operacoes de rede estao evoluindo. A complexidade so aumentara conforme redes crescem e se tornam mais criticas para operacoes de negocio. Abordagens manuais que funcionavam para redes menores e mais simples nao escalam para requisitos modernos. 8558 8559Selent Agent representa um passo pratico em direcao a operacoes de rede inteligentes. Nao uma visao distante de redes totalmente autonomas, mas uma solucao que voce pode implantar hoje que entrega valor imediato enquanto constroi em direcao a esse futuro. 8560 8561Ao implantar agentes especializados que entendem seu ambiente Meraki especifico, voce nao esta apenas resolvend
8561o problemas de hoje-voce esta construindo uma base para operacoes de rede escalaveis e inteligentes. 8562 8563--- 8564 8565*Pronto para implantar agentes especializados para suas redes Meraki? Aprenda como Selent Agent pode fornecer analise continua, garantir conformidade e guiar sua equipe atraves de resolucao de problemas.* 8566`},{slug:"open-sourcing-selent-mcp",title:"Open Sourcing Selent MCP: Acesso Dinamico a API Meraki Atraves do Model Context Protocol",excerpt:"Anunciando nosso primeiro projeto open source: um servidor Model Context Protocol que fornece acesso dinamico a toda a API do Cisco Meraki Dashboard atraves de descoberta e execucao inteligentes.",date:"2025-08-18",author:"Fabian Levinsky",authorImage:"/fabian.jpeg",authorTitle:"Head of Engineering",authorBio:"Fabian is the Head of Engineering at Selent, leading backend systems, AI engineering, and frontend development. With deep expertise in distributed systems and intelligent automation, he architects the core technology that powers Selent's network operations platform.",category:"Open Source",tags:["OpenSource","MCP","Meraki","API","NetworkAutomation","AI"],coverImage:"https://images.unsplash.com/photo-1558494949-ef010cbdcc31?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"7 min",content:` 8567Hoje, estamos lancando nosso primeiro projeto open source: **Selent MCP** - um servidor Model Context Protocol que fornece acesso dinamico a toda a API do Cisco Meraki Dashboard. Em vez de construir ferramentas estaticas para endpoints individuais, desenvolvemos uma solucao que descobre e executa qualquer uma das mais de 400 chamadas de API Meraki sob demanda. 8568 8569## O Problema Tecnico Que Resolvemos 8570
8571Trabalhar com a API do Meraki Dashboard tipicamente requer construir integracoes individuais para cada endpoint. Com mais de 400 endpoints disponiveis atraves de organizacoes, dispositivos, redes e funcoes de seguranca, esta abordagem cria overhead significativo de desenvolvimento e carga de manutencao. 8572 8573Solucoes tradicionais forcam equipes a um ciclo doloroso: 8574 8575- **Criacao manual de ferramentas** para cada endpoint de API 8576- **Validacao de parametros hardcoded** que quebra com atualizacoes de API 8577- **Tratamento de erros customizado** por endpoint, levando a comportamento inconsistente 8578- **Manutencao constante** conforme novos recursos de API sao lancados 8579 8580Para equipes de engenharia de rede gerenciando dezenas de redes Meraki, isso significava semanas de tempo de desenvolvimento apenas para acessar funcionalidade basica - tempo que poderia ser gasto em otimizacao e automacao real de rede. 8581 8582## Nossa abordagem de engenharia: Descoberta e Execucao Dinamicas 8583 8584Selent MCP resolve isso atraves de descoberta inteligente de API e execucao dinamica. O sistema usa correspondencia semantica para mapear consultas em linguagem natural para endpoints de API apropriados, depois valida dinamicamente parametros e executa chamadas. 8585 8586### Arquitetura central 8587 8588\`\`\` 8589Resolucao Dinamica de Endpoints 8590|-- Correspondencia de consulta semantica 8591|-- Autodescoberta de parametros 8592|-- Validacao em tempo real 8593|-- Framework de execucao generico 8594 8595Implantacao em Producao 8596|-- Containerizacao Docker 8597|-- Pulls de imagem auto-atualizantes 8598|-- Configuracao baseada em ambiente 8599|-- Logging abrangente 8600\`\`\` 8601 8602### Recursos tecnicos principais 8603 8604**Motor de Descoberta**: Busca semantica atraves da documentacao de endpoints de API elimina a necessidade de desenvolvedores memorizarem centenas de nomes de endpoints e parametros. 8605 8606**Resolucao de Parametros**: Deteccao e validacao dinamica de parametros significa que o sistema se adapta a mudancas de API automaticamente, sem exigir atualizacoes de codigo. 8607 8608**Camada de Execucao**: Cliente de API generico com tratamento abrangente de erros fornece comportamento consistente em todos os endpoints. 8609 8610**Estrategia de Cache**: Otimizacao de desempenho para consultas comuns reduz chamadas de API e melhora tempos de resposta. 8611 8612## Exemplos de implementacao: Linguagem Natural para Chamadas de API 8613 8614O sistema traduz linguagem natural diretamente para chamadas de API formatadas corretamente: 8615 8616\`\`\`shell 8617# Consulta: "Get device Q4AB-WMAB-TAZU port 4 configuration" 8618# Resolve para: switch.getDeviceSwitchPort(serial="Q4AB-WMAB-TAZU", portId="4") 8619 8620# Consulta: "List network clients with traffic data" 8621# Resolve para: networks.getNetworkClients(networkId="N_xxx", timespan=3600) 8622 8623# Consulta: "Show firewall rules for MX devices" 8624# Resolve para: appliance.getNetworkApplianceFirewallL3FirewallRules(networkId="N_xxx") 8625\`\`\` 8626 8627Esta abordagem transforma como equipes de rede interagem com a API Meraki - de busca complexa de documentacao e criacao de parametros para consultas simples em linguagem natural. 8628 8629## Beneficios de engenharia que importam 8630 8631### Escalabilidade sem complexidade 8632 8633Implementacao unica suporta todos os endpoints de API Meraki atuais e futuros. Quando a Cisco lanca novos recursos de API, eles se tornam imediatamente disponiveis sem nenhuma mudanca de codigo. 8634 8635### Zero overhead de manutencao 8636 8637Nenhuma manutencao de codigo por endpoint necessaria. O sistema se adapta a mudancas de API automaticamente, eliminando a carga tradicional de manutencao. 8638 8639### Desempenho otimizado 8640 8641Cache inteligente e otimizacao de chamada unica entregam tempos de resposta abaixo de 2 segundos para operacoes comuns, com taxas de acerto de cache excedendo 90%. 8642 8643### Confiabilidade empresarial 8644 8645Tratamento de erros generico e logica de retry em todos os endpoints garante comportamento consistente, enquanto rate limiting integrado previne problemas de throttling de API. 8646 8647## Implantacao pronta para producao 8648 8649Desenvolvemos isso especificamente para ambientes de producao onde confiabilidade e facilidade de implantacao sao criticas: 8650 8651\`\`\`shell 8652# Implantacao em producao com atualizacoes automaticas 8653docker run \\ 8654 --pull=always \\ 8655 -e MERAKI_API_KEY=$MERAKI_API_KEY \\ 8656 -i --rm selentai/selent-mcp:latest 8657\`\`\` 8658 8659A flag \`--pull=always\` garante que sua implantacao receba automaticamente atualizacoes sem intervencao manual. Health checks de container e logging abrangente fornecem a visibilidade operacional que ambientes de producao exigem. 8660 8661## Implementacao do Model Context Protocol 8662 8663Construido na especificacao Model Context Protocol da Anthropic, Selent MCP implementa a interface MCP completa: 8664 8665- **Interface MCP Padrao**: Compativel com qualquer cliente MCP (Claude Desktop, integracoes customizadas, etc.) 8666- **Descoberta de Recursos**: Enumeracao dinamica de endpoints para exploracao de API em tempo real 8667- **Execucao de Ferramentas**: Chamadas de API parametrizadas com validacao inteligente de parametros 8668- **Propagacao de Erros**: Respostas de erro estruturadas que fornecem feedback acionavel 8669 8670## Por que estamos fazendo open source 8671 8672Automacao de rede nao deveria exigir reinventar os mesmos padroes de integracao repetidamente. Estamos lancando isso como open source para: 8673 8674### Acelerar adocao da industria 8675 8676Remover as barreiras tecnicas que impedem equipes de aproveitar as poderosas capacidades de API do Meraki. 8677 8678### Fomentar inovacao da comunidade 8679 8680Habilitar engenheiros de rede e desenvolvedores a contribuir melhorias que beneficiam todo o ecossistema. 8681 8682### Padronizar padroes de integracao 8683 8684Fornecer uma interface consistente e confiavel que organizacoes podem depender em diferentes projetos e equipes. 8685 8686### Eliminar desenvolvimento redundante 8687 8688Parar de desperdicar ciclos de engenharia construindo as mesmas integracoes de API repetidamente. 8689 8690## Especificacoes tecnicas 8691 8692### Caracteristicas de desempenho 8693 8694- **Latencia de cold start**: <2 segundos para consultas comuns 8695- **Taxa de acerto de cache**: >90% para operacoes repetidas
8696- **Footprint de memoria**: <100MB container base 8697- **Conformidade de API**: Rate limiting e logica de retry integrados 8698 8699## Comecando: De Zero a Integracao de API em Minutos 8700 8701Para equipes de engenharia prontas para integrar: 8702 8703\`\`\`shell 8704# Clone e implante localmente para desenvolvimento 8705git clone [repository-url] 8706cd selent-mcp 8707docker-compose up -d 8708 8709# Ou use imagem pre-construida para producao 8710docker run --pull=always selentai/selent-mcp:latest 8711\`\`\` 8712 8713Configure seu cliente MCP (Claude Desktop, integracao de API customizada, etc.) para conectar ao endpoint do servidor, e voce esta pronto para comecar a consultar a API Meraki com linguagem natural. 8714 8715## Roadmap de engenharia: O Que Vem a Seguir 8716 8717Este lancamento representa nossa implementacao MCP fundamental, construida com extensibilidade em mente. Nosso roadmap de engenharia inclui: 8718 8719### Otimizacoes de desempenho 8720 8721Analise de padroes de uso impulsionara melhorias de desempenho direcionadas, incluindo cache preditivo e otimizacao de consultas. 8722 8723### Estrategias de cache estendidas 8724 8725Cache warming inteligente e cache hierarquico para operacoes complexas multi-endpoint. 8726 8727### Suporte multi-provedor 8728 8729Estendendo o padrao de descoberta dinamica para outras APIs de gerenciamento de rede alem do Meraki. 8730 8731### Diagnosticos aprimorados 8732 8733Diagnosticos de erro detalhados e rastreamento de chamadas de API para requisitos de debugging empresarial. 8734 8735O codebase e arquitetado para contribuicao da comunidade, com abstracoes limpas e documentacao abrangente projetada para facilitar desenvolvimento externo. 8736 8737## Acesso e documentacao 8738 8739- **Codigo Fonte**: [GitHub Repository URL] 8740- **Imagens de Container**: \`docker pull selentai/selent-mcp:latest\` 8741- **Documentacao Tecnica**: Referencia de API completa e guias de integracao no README do repositorio 8742- **Suporte da Comunidade**: Issues e discussoes atraves do GitHub 8743 8744## O panorama maior 8745 8746Este projeto representa mais do que apenas outra ferramenta de integracao de API, e nosso compromisso em avancar automacao de rede atraves de ferramentas inteligentes e adaptativas. Ao eliminar o atrito entre engenheiros de rede e as APIs com as quais precisam trabalhar, estamos habilitando equipes a focar no que importa: construir redes resilientes e otimizadas. 8747 8748A comunidade de engenharia tem consistentemente mostrado que colaboracao aberta produz as solucoes mais robustas e inovadoras. Estamos animados para ver como engenheiros de rede, desenvolvedores e especialistas em automacao construirao sobre esta base para resolver desafios que ainda nem imaginamos. 8749 8750Automacao de rede deveria ser acessivel, confiavel e inteligente. Com Selent MCP, finalmente e. 8751 8752--- 8753 8754*Pronto para transformar sua abordagem de integracao de API Meraki? Clone o repositorio e comece a construir automacao de rede mais inteligente hoje.* 8755`},{slug:"executive-guide-aiops-networking",title:"Guia Executivo para AIOps: Transformando Operacoes de Rede na Empresa Digital",excerpt:"Um briefing estrategico para lideres de negocios sobre como Inteligencia Artificial para Operacoes de TI transforma gerenciamento de rede de centro de custos em vantagem competitiva.",date:"2025-08-01",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Guia Executivo",tags:["AIOps","DigitalTransformation","NetworkAutomation","ExecutiveStrategy","ROI"],coverImage:"https://images.unsplash.com/photo-1558494949-ef010cbdcc31?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"11 min",content:` 8756## Resumo Executivo 8757 8758No ambiente de negocios hiperconectado de hoje, o desempenho da rede impacta diretamente a experiencia do cliente, produtividade dos funcionarios e geracao de receita. No entanto, abordagens tradicionais de gerenciamento de rede lutam para acompanhar a complexidade da infraestrutura moderna. E aqui que AIOps-Inteligencia Artificial para Operacoes de TI-emerge como uma capacidade transformadora para organizacoes visionarias. 8759 8760AIOps representa uma mudanca fundamental em como empresas gerenciam sua infraestrutura de rede. Ao aplicar inteligencia artificial avancada e aprendizado de maquina as operacoes de rede, organizacoes podem transformar de combate reativo a incendios para otimizacao proativa. Para empresas rodando em plataformas gerenciadas em nuvem como Cisco Meraki, AIOps desbloqueia visibilidade, automacao e inteligencia sem precedentes em todo seu ecossistema de rede. 8761 8762O caso de negocio e convincente: empresas implementando AIOps relatam retornos medios de $3,50 para cada dolar investido, com reducoes de despesas operacionais de 42% e tempos de resolucao de incidentes cortados em 30-50%. Alem dos numeros, AIOps permite que equipes de TI mudem o foco de manutencao rotineira para inovacao estrategica, apoiando diretamente iniciativas de transformacao digital. 8763 8764Este guia fornece aos executivos uma compreensao clara das capacidades de AIOps, benef
8764icios de negocio e implicacoes estrategicas. Seja avaliando investimentos em tecnologia, planejando transformacao digital ou buscando vantagem competitiva atraves de excelencia operacional, entender AIOps e essencial para tomada de decisao informada na economia digital de hoje. 8765 8766## Entendendo AIOps: Uma Perspectiva de Negocio 8767 8768### O Que e AIOps? 8769 8770Em sua essencia, AIOps e a aplicacao de inteligencia artificial a operacoes de TI. Pense nisso como criar um "sistema imunologico digital" para sua infraestrutura de rede-um que automaticamente identifica, diagnostica e responde a problemas antes que impactem seu negocio. 8771 8772Para executivos, AIOps se traduz em tres capacidades fundamentais: 8773 87741. **Inteligencia Preditiva**: Antecipar problemas antes que ocorram 87752. **Resposta Automatizada**: Resolver problemas sem intervencao humana 87763. **Otimizacao Continua**: Aprender e melhorar com cada interacao 8777 8778### A Evolucao de Operacoes Manuais para Inteligentes 8779 8780Gerenciamento de rede tradicional segue um padrao familiar: algo quebra, alarmes soam, engenheiros investigam, e eventualmente o problema e resolvido. Este ciclo reativo consome recursos, impacta produtividade e frequentemente resulta em tempo de inatividade voltado para o cliente. 8781 8782AIOps transforma este paradigma. Em vez de esperar problemas se manifestarem, sistemas inteligentes analisam continuamente padroes de rede, preveem problemas potenciais e frequentemente os resolvem antes que alguem perceba. E a diferenca entre visitas a sala de emergencia e cuidados preventivos de saude. 8783 8784### Por Que Abordagens Tradicionais Ficam Aquem 8785 8786Empresas modernas operam redes de escala e complexidade sem precedentes. Uma empresa tipica de medio porte gerencia centenas de dispositivos de rede em multiplos locais, suportando milhares de usuarios e aplicacoes. Abordagens tradicionais de gerenciamento simplesmente nao conseguem escalar para atender essas demandas: 8787 8788- **Limitacoes humanas**: Engenheiros de rede podem monitorar dezenas de metricas; IA pode analisar milhoes 8789- **Requisitos de velocidade**: Negocios modernos exigem resposta instantanea; processos manuais levam horas 8790- **Crescimento de complexidade**: Redes crescem exponencialmente mais complexas; capacidade humana permanece linear 8791- **Escalada de custos**: Adicionar pessoal para gerenciar crescimento se torna proibitivamente caro 8792 8793## O Impacto nos Negocios da Inteligencia de Rede 8794 8795### De Centro de Custos a Ativo Estrategico 8796 8797Tradicionalmente, infraestrutura de rede tem sido vista como um custo necessario-como eletricidade ou encanamento. AIOps muda fundamentalmente esta perspectiva, transformando redes em habilitadores estrategicos de negocios que impulsionam vantagem competitiva. 8798 8799Considere como inteligencia de rede impacta metricas centrais de negocio: 8800 8801**Experiencia do Cliente** 8802- 99,99% de uptime se torna alcancavel e sustentavel 8803- Problemas de desempenho sao resolvidos antes que clientes percebam 8804- Entrega de servico se torna previsivel e confiavel 8805 8806**Eficiencia Operacional** 8807- Produtividade da equipe de TI aumenta em 50% ou mais 8808- Tarefas rotineiras sao automatizadas, liberando recursos para inovacao 8809- Tempos de resolucao de problemas caem de horas para minutos 8810 8811**Agilidade de Negocio** 8812- Novos servicos sao implantados mais rapido com validacao inteligente 8813- Escalabilidade se torna previsivel e automatizada 8814- Risco de mudanca diminui atraves de analise preditiva 8815 8816### Indicadores-Chave de Desempenho Que Importam 8817 8818Ao avaliar o impacto de AIOps, foque em metricas que afetam diretamente resultados de negocio: 8819 88201. **Tempo Medio para Resolucao (MTTR)**: Reduzido em 50-70% 88212. **Despesas Operacionais**: Diminuidas em 35-45% 88223. **Disponibilidade de Servico**: Melhorada de 99,5% para 99,99% 88234. **Produtividade de TI**: Aumentada em 40-60% 88245. **Satisfacao do Cliente**: Melhorada em 25-35% 8825 8826### Resultados de Negocio do Mundo Real 8827 8828Organizacoes lideres ja estao realizando beneficios significativos da implementacao de AIOps: 8829 8830**Cadeia de Varejo Global**: Um varejista de 2.000 locais reduziu fechamentos de lojas relacionados a rede em 95%, economizando $4,2M anualmente em vendas perdidas. 8831 8832**Rede de Saude**: Um sistema hospitalar melhorou a confiabilidade da rede para 99,99%, garantindo que sistemas criticos de cuidado ao paciente permanecam disponiveis. 8833 8834**Servicos Financeiros**: Um banco regional reduziu a preparacao para auditoria de conformidade de semanas para horas enquanto melhorava a postura de seguranca. 8835 8836## A Jornada: De Operacoes Reativas para Preditivas 8837 8838### O Modelo de Maturidade de AIOps 8839 8840Organizacoes tipicamente progridem atraves de quatro estagios em sua jornada de AIOps: 8841 8842#### Estagio 1: Visibilidade e Monitoramento 8843- Visao abrangente da saude da rede 8844- Metricas de desempenho em tempo real 8845- Alertas e dashboards consolidados 8846- **Impacto no Negocio**: Identificacao mais rapida de problemas, pontos cegos reduzidos 8847
8848#### Estagio 2: Resposta e Remediacao Automatizadas 8849- Resolucao automatica de problemas comuns 8850- Priorizacao inteligente de alertas 8851- Automacao de fluxos de trabalho 8852- **Impacto no Negocio**: 50% de reducao em intervencoes manuais 8853 8854#### Estagio 3: Otimizacao Preditiva 8855- Antecipacao de problemas antes da ocorrencia 8856- Planejamento de capacidade e previsao 8857- Ajuste proativo de desempenho 8858- **Impacto no Negocio**: 70% de reducao em incidentes 8859 8860#### Estagio 4: Operacoes Autonomas 8861- Infraestrutura auto-reparadora 8862- Otimizacao continua 8863- Automacao alinhada ao negocio 8864- **Impacto no Negocio**: TI se torna motor de inovacao 8865 8866### Exemplos Praticos de Progressao 8867 8868A maioria das organizacoes comeca sua jornada abordando pontos de dor especificos: 8869 8870**Ano 1**: Implementar monitoramento e alertas automatizados 8871- Reduzir alarmes falsos em 80% 8872- Cortar tempo de resposta a incidentes pela metade 8873 8874**Ano 2**: Implantar remediacao automatizada 8875- Eliminar 60% das tarefas manuais 8876- Melhorar produtividade da equipe em 40% 8877 8878**Ano 3**: Alcancar capacidades preditivas 8879- Prevenir 70% das interrupcoes potenciais 8880- Habilitar planejamento de negocio proativo 8881 8882## Beneficios Estrategicos para a Empresa 8883 8884### Excelencia Operacional 8885 8886AIOps entrega melhorias mensuraveis em metricas operacionais: 8887 8888**Otimizacao de Recursos** 8889- Reduzir overhead operacional em 40% 8890- Realocar 50% do tempo de TI para projetos estrategicos 8891- Diminuir requisitos de treinamento para novos funcionarios 8892 8893**Mitigacao de Riscos** 8894- Prevenir 70% dos incidentes de seguranca potenciais 8895- Garantir conformidade continua 8896- Reduzir erro humano em 80% 8897 8898**Qualidade de Servico** 8899- Alcancar desempenho consistente em todos os locais 8900- Entregar experiencia de usuario previsivel 8901- Habilitar confiabilidade 24/7 sem equipe 24/7 8902 8903### Aceleracao de Inovacao 8904 8905Ao automatizar operacoes rotineiras, AIOps libera sua equipe para focar em inovacao: 8906 8907- Lancar novos servicos 60% mais rapido 8908- Testar e implantar mudancas com confianca 8909- Experimentar sem medo de quebrar producao 8910- Alinhar iniciativas de TI com objetivos de negocio 8911 8912### Diferenciacao Competitiva 8913 8914Na economia digital de hoje, desempenho de rede impacta diretamente posicao competitiva: 8915 8916- Experiencia superior do cliente impulsiona lealdade 8917- Eficiencia operacional permite competitividade de precos 8918- Agilidade permite resposta rapida a mudancas de mercado 8919- Confiabilidade constroi confianca e reputacao 8920 8921## ROI e Realizacao de Valor 8922 8923### O Caso Financeiro para AIOps 8924
8925Organizacoes implementando AIOps tipicamente veem retornos dentro de 12-18 meses: 8926 8927**Economia Direta de Custos** 8928- Custos de mao de obra reduzidos em 35-45% 8929- Custos de inatividade diminuidos em 60-80% 8930- Eficiencia de infraestrutura melhorada em 25-30% 8931 8932**Protecao de Receita** 8933- Prevenir $500K-$2M em perdas anuais por inatividade 8934- Manter satisfacao e retencao de clientes 8935- Habilitar novos servicos geradores de receita 8936 8937**Valor Estrategico** 8938- Acelerar iniciativas de transformacao digital 8939- Melhorar posicionamento competitivo 8940- Aprimorar agilidade organizacional 8941 8942### Framework de Calculo de ROI 8943 8944Para uma empresa tipica com mais de 500 dispositivos de rede: 8945 8946**Custos Anuais Sem AIOps**: 8947- Equipe de operacoes de rede: $1,2M 8948- Impacto de inatividade: $800K 8949- Custos de ineficiencia: $400K 8950- **Total: $2,4M** 8951 8952**Custos Anuais Com AIOps**: 8953- Plataforma de AIOps: $300K 8954- Necessidades reduzidas de pessoal: $700K 8955- Inatividade minima: $100K 8956- **Total: $1,1M** 8957 8958**Beneficio Anual Liquido**: $1,3M 8959**ROI**: 333% em tres anos 8960**Periodo de Payback**: 9-12 meses 8961 8962### Alem dos Numeros 8963 8964Enquanto metricas financeiras sao importantes, AIOps entrega beneficios estrategicos que transcendem ROI simples: 8965 8966- **Resiliencia de Negocio**: Capacidade de manter operacoes durante disrupcoes 8967- **Escalabilidade**: Suportar crescimento sem aumentos proporcionais de custo 8968- **Capacidade de Inovacao**: Recursos liberados para transformacao digital 8969- **Responsividade de Mercado**: Agilidade para adaptar a condicoes mutaveis 8970 8971## Consideracoes de Implementacao 8972 8973### Prontidao Organizacional 8974 8975Implementacao bem-sucedida de AIOps requer mais do que tecnologia: 8976 8977**Alinhamento de Lideranca** 8978- Patrocinio executivo e visao 8979- Metricas claras de sucesso 8980- Compromisso com gerenciamento de mudanca 8981 8982**Fatores Culturais** 8983- Disposicao para abracar automacao 8984- Confianca em decisoes impulsionadas por IA 8985- Foco em melhoria continua 8986 8987**Evolucao de Habilidades** 8988- Mudanca de pensamento reativo para estrategico 8989- Desenvolvimento de novas competencias 8990- Enfase em alinhamento de negocio 8991 8992### Fatores de Sucesso 8993 8994Organizacoes que realizam valor maximo de AIOps compartilham caracteristicas comuns: 8995
89961. **Comece com Objetivos Claros**: Defina resultados especificos de negocio 89972. **Implemente em Fases**: Comece com casos de uso de alto impacto 89983. **Meca Progresso**: Rastreie metricas tecnicas e de negocio 89994. **Itere e Melhore**: Refine continuamente baseado em resultados 90005. **Invista em Gerenciamento de Mudanca**: Apoie transformacao da equipe 9001 9002### Armadilhas Comuns a Evitar 9003 9004Aprenda com experiencias de outros: 9005 9006- **Nao automatize processos quebrados**: Corrija fundamentos primeiro 9007- **Evite pensamento tecnologia-primeiro**: Foque em resultados de negocio 9008- **Nao negligencie prontidao da equipe**: Invista em treinamento e suporte 9009- **Resista a abordagens tudo-ou-nada**: Implemente em fases 9010- **Nao ignore fatores culturais**: Enderece resistencia proativamente 9011 9012## Preparando Sua Estrategia de Rede para o Futuro 9013 9014### Tendencias Emergentes Moldando Operacoes de Rede 9015 9016Fique a frente entendendo para onde a industria esta indo: 9017 9018**Redes Autonomas** 9019- Infraestrutura auto-configuravel 9020- Operacoes impulsionadas por intencao de negocio 9021- Provisionamento zero-touch 9022 9023**Inteligencia de Borda** 9024- Processamento de IA distribuido 9025- Tomada de decisao local em tempo real 9026- Latencia e largura de banda reduzidas 9027 9028**Analiticas de Negocio Preditivas** 9029- Insights de rede impulsionando decisoes de negocio 9030- Correlacao com metricas de negocio 9031- Planejamento proativo de capacidade 9032 9033### Consideracoes de Planejamento Estrategico 9034 9035Ao desenvolver sua estrategia de rede, considere: 9036 90371. **Requisitos de Escalabilidade**: Sua abordagem suportara crescimento de 10x? 90382. **Capacidades de Integracao**: Voce pode alavancar investimentos existentes? 90393. **Ecossistema de Vendors**: Voce esta construindo ou comprando capacidades? 90404. **Desenvolvimento de Habilidades**: Como voce evoluira competencias da equipe? 90415. **Alinhamento de Negocio**: Sua estrategia suporta objetivos corporativos? 9042 9043### Construindo para Necessidades de Amanha 9044 9045O ritmo de mudanca continua acelerando. Organizacoes que prosperarao serao aquelas que: 9046 9047- Abracam automacao inteligente 9048- Focam em resultados de negocio sobre tecnologia 9049- Investem em aprendizado e adaptacao continuos 9050- Constroem flexibilidade em suas estrategias 9051- Mantem seguranca e conformidade como fundamentos 9052 9053## O Caminho Adiante 9054 9055AIOps representa mais do que uma atualizacao tecnologica-e uma transformacao estrategica que posiciona sua organizacao para sucesso na economia digital. A jornada de operacoes reativas para preditivas entrega beneficios operacionais imediatos enquanto constroi vantagem competitiva de longo prazo. 9056 9057Para executivos avaliando esta transformacao, as questoes-chave sao: 9058 90591. Sua organizacao pode se dar ao luxo de manter operacoes status quo enquanto concorrentes avancam? 90602. Que oportunidades de negocio voce poderia perseguir com 50% mais capacidade de TI? 90613. Como 99,99% de confiabilidade de rede impactaria seus relacionamentos com clientes? 90624. Qual e o custo de nao agir-em termos financeiros e competitivos? 9063 9064A transicao para operacoes de rede inteligentes nao e uma questao de se, mas quando. Organizacoes que se movem decisivamente capturarao vantagens de pioneiro, enquanto aquelas que atrasam correm o risco de ficar para tras em um mercado cada vez mais digital. 9065 9066## Proximos Passos 9067 9068Pronto para explorar como AIOps pode transformar suas operacoes de rede? Considere estas acoes imediatas: 9069 90701. **Avalie Estado Atual**: Avalie sua maturidade operacional e pontos de dor
90712. **Defina Metricas de Sucesso**: Estabeleca objetivos claros de negocio 90723. **Construa o Caso de Negocio**: Calcule ROI potencial para sua organizacao 90734. **Desenvolva um Roteiro**: Crie um plano de implementacao em fases 90745. **Engaje Stakeholders**: Alinhe lideranca e equipes em torno da visao 9075 9076A jornada para operacoes de rede inteligentes comeca com um unico passo. Para organizacoes prontas para transformar suas redes de centros de custo em ativos estrategicos, esse passo comeca hoje. 9077 9078--- 9079 9080*Este guia executivo fornece uma base para entender AIOps em operacoes de rede. Para insights personalizados sobre como automacao inteligente pode transformar seu ambiente de rede especifico, considere engajar com especialistas da industria que podem avaliar seus requisitos e oportunidades unicos.* 9081`},{slug:"automate-cisco-meraki-backup-restore",title:"Como Automatizar Backup e Restauracao de Configuracao Cisco Meraki",excerpt:"Aprenda como organizacoes modernas estao automatizando seus backups de configuracao Cisco Meraki para evitar tempo de inatividade, aproveitar automacao e permanecer protegidas.",date:"2025-07-25",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Tecnico",tags:["CiscoMeraki","Automation","BackupRestore","NetworkAutomation","AIOps"],coverImage:"https://images.unsplash.com/photo-1558618666-fcd25c85cd64?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"10 min",content:` 9082**Como sua empresa lida com backups e restauracoes de configuracao Cisco Meraki?** 9083 9084Se voce e como a maioria das organizacoes, a resposta provavelmente envolve uma mistura de processos manuais, scripts ocasionais e dedos cruzados. Mas aqui esta a realidade: em uma era onde a empresa media gerencia 309 redes e quase 1.800 dispositivos, o gerenciamento manual de configuracao esta se tornando impossivel de sustentar. 9085 9086A boa noticia? Organizacoes lideres estao transformando sua abordagem ao gerenciamento de configuracao Meraki-e vendo resultados notaveis. De tempos de recuperacao 95% mais rapidos a milhoes em custos de inatividade evitados, a mudanca para automacao esta entregando valor de negocio mensuravel. 9087 9088## O Estado do Gerenciamento de Configuracao Meraki Hoje 9089 9090### Onde as Organizacoes Estao 9091 9092Nossa pesquisa revela uma divisao marcante em como as empresas abordam o gerenciamento de configuracao Meraki: 9093 9094- **45%** dependem de backups periodicos manuais (quando alguem lembra) 9095- **28%** usam scripts basicos que rodam ocasionalmente 9096- **19%** nao tem estrategia formal de backup 9097- **Apenas 8%** implementaram automacao abrangente 9098 9099Isso significa que 92% das organizacoes estao operando com risco significativo-um erro de configuracao distante de inatividade prolongada. 9100 9101### O Desafio Crescente de Complexidade 9102 9103Ambientes Meraki modernos evoluiram muito alem de implantacoes simples. As redes de hoje apresentam: 9104 9105- **Arquiteturas multi-site** com malhas AutoVPN complexas conectando centenas de locais 9106- **Configuracoes dinamicas** que mudam varias vezes diariamente atraves de APIs e integracoes 9107- **Implantacoes baseadas em templates** onde uma mudanca pode cascatear por regioes inteiras 9108- **Ambientes hibridos** misturando infraestrutura gerenciada em nuvem e on-premises 9109 9110Esta complexidade torna o rastreamento manual virtualmente impossivel. Como um arquiteto de rede de um varejista Fortune 500 observou: "Estavamos gastando mais tempo documentando mudancas do que fazendo-as. E ainda assim nao conseguiamos acompanhar." 9111 9112## Entendendo o Verdadeiro Impacto nos Negocios 9113 9114### Alem do Tempo de Inatividade: O Efeito Cascata 9115 9116Quando configuracoes falham, o impacto se estende muito alem da simples perda de conectividade. Analises recentes da industria mostram: 9117 9118**Impacto Imediato nos Negocios:** 9119- Receita perdida em media de $5.600-$9.000 por minuto
9120- Perdas de produtividade de funcionarios afetando milhares de trabalhadores 9121- Degradacao da experiencia do cliente levando a 32% de taxa de rotatividade 9122- Violacoes de SLA acionando clausulas de penalidade 9123 9124**Consequencias de Longo Prazo:** 9125- Falhas de auditoria de conformidade resultando em multas de ate $50 milhoes 9126- Vulnerabilidades de seguranca de politicas mal configuradas 9127- Acumulo de divida tecnica tornando mudancas futuras mais arriscadas 9128- Burnout da equipe por combate constante a incendios 9129 9130### Cenarios do Mundo Real Que Mantem Equipes Acordadas 9131 9132**A Falha em Cascata:** Em setembro de 2024, uma mudanca rotineira de VLAN em um grande provedor de saude acionou uma reconfiguracao de AutoVPN que se propagou por 150 clinicas. A recuperacao levou 14 horas e custou cerca de $4,2 milhoes. 9133 9134**O Desastre de Template:** A modificacao de template de uma cadeia de varejo afetou 500 lojas simultaneamente. Sem backups adequados, cada local exigiu reconfiguracao manual-um processo que levou tres semanas para ser totalmente concluido. 9135 9136**O Pesadelo de Conformidade:** Durante uma auditoria surpresa, uma empresa de servicos financeiros nao conseguiu provar suas configuracoes de rede de 90 dias atras. A investigacao e remediacao resultantes custaram $800.000 e danificaram relacionamentos-chave com clientes. 9137 9138## A Jornada para Excelencia em Automacao 9139 9140### Estagio 1: Estabelecendo Visibilidade de Configuracao 9141 9142O primeiro passo para automacao e entender o que voce tem. Organizacoes lideres comecam por: 9143 9144**Criando um Inventario de Configuracao:** 9145- Documentando todas as redes, dispositivos e templates 9146- Mapeando dependencias de configuracao 9147- Identificando componentes criticos vs. nao-criticos 9148- Estabelecendo configuracoes de linha de base 9149 9150**Implementando Controle de Versao:** 9151- Tratando configuracoes como codigo 9152- Rastreando todas as mudancas com timestamps e atribuicao 9153- Criando fluxos de trabalho de aprovacao para modificacoes 9154- Mantendo historico de configuracao 9155 9156### Estagio 2: Construindo Capacidades de Backup Automatizado 9157 9158Estrategias modernas de backup vao alem de simples snapshots: 9159 9160**Captura Continua de Configuracao:** 9161- Deteccao em tempo real de mudancas de configuracao 9162- Acionamento automatico de backup baseado em modificacoes 9163- Armazenamento criptografado com redundancia geografica 9164- Politicas de retencao alinhadas com requisitos de conformidade 9165 9166**Gerenciamento Inteligente de Backup:** 9167- Deduplicacao para otimizar armazenamento 9168- Compressao sem perder fidelidade 9169- Marcacao de metadados para recuperacao facil 9170- Teste automatizado de integridade de backup 9171 9172### Estagio 3: Implementando Recuperacao Inteligente 9173 9174O verdadeiro teste de qualquer sistema de backup e a restauracao. Organizacoes avancadas implementam: 9175 9176**Capacidades de Recuperacao Rapida:** 9177- Restauracao com um clique para qualquer ponto no tempo 9178- Opcoes de recuperacao granular (rede completa ou componentes especificos) 9179- Configuracoes pre-validadas para evitar restauracoes invalidas 9180- Rollback automatizado se problemas forem detectados 9181 9182**Estrategias de Implantacao Progressiva:** 9183- Implantacoes canario para testar configuracoes 9184- Rollouts em fases com verificacoes automaticas de saude 9185- Gatilhos de rollback imediato baseados em metricas de desempenho 9186- Janelas de implantacao em horario comercial 9187 9188## A Revolucao da IA no Gerenciamento de Configuracao 9189 9190### Inteligencia Preditiva Muda Tudo 9191 9192Inteligencia artificial esta transformando gerenciamento reativo de configuracao em otimizacao proativa de rede: 9193 9194**Predicao de Risco de Configuracao:** 9195Modelos de IA analisam mudancas propostas contra dados historicos para prever problemas potenciais antes da implementacao. Um provedor de telecomunicacoes reduziu incidentes relacionados a configuracao em 73% usando analiticas preditivas. 9196 9197**Deteccao de Anomalias:** 9198Algoritmos de aprendizado de maquina monitoram continuamente o comportamento da rede, correlacionando degradacao de desempenho com mudancas recentes de configuracao. Isso permite remediacao automatica antes que os usuarios percebam problemas. 9199 9200**Recomendacoes de Otimizacao:** 9201IA analisa padroes de configuracao em milhares de redes para sugerir otimizacoes. Melhorias comuns
9201incluem consolidacao de politicas de seguranca, otimizacao de VLAN e melhorias de roteamento de trafego. 9202 9203### Gerenciamento de Configuracao em Linguagem Natural 9204 9205O ultimo avanco permite que engenheiros de rede gerenciem configuracoes usando comandos em ingles simples: 9206 9207- "Mostre-me todas as regras de firewall adicionadas nos ultimos 30 dias" 9208- "Restaure o escritorio de Boston para a configuracao de terca-feira passada" 9209- "Compare configuracoes atuais de VPN com nosso template padrao" 9210 9211Isso democratiza o gerenciamento de configuracao, permitindo que engenheiros juniores realizem tarefas complexas com seguranca. 9212 9213## Melhores Praticas de Lideres da Industria 9214 9215### 1. Adote uma Mentalidade GitOps 9216 9217Trate suas configuracoes de rede como codigo de software: 9218- Use estrategias de branching para testar mudancas 9219- Implemente revisao por pares antes da implantacao em producao 9220- Mantenha mensagens de commit detalhadas 9221- Crie pipelines de testes automatizados 9222 9223### 2. Estabeleca Objetivos Claros de Recuperacao 9224 9225Defina e teste regularmente suas capacidades de recuperacao: 9226- **Objetivo de Tempo de Recuperacao (RTO):** Quao rapido voce pode restaurar? 9227- **Objetivo de Ponto de Recuperacao (RPO):** Quanta perda de dados e aceitavel? 9228- **Escopo de Recuperacao:** Voce pode restaurar granularmente ou apenas configs completas? 9229- **Validacao de Recuperacao:** Como voce verifica restauracao bem-sucedida? 9230 9231### 3. Crie Padroes de Configuracao 9232 9233Padronizacao simplifica automacao: 9234- Desenvolva convencoes de nomenclatura para todos os objetos 9235- Crie bibliotecas de templates para configuracoes comuns 9236- Documente procedimentos operacionais padrao 9237- Aplique consistencia atraves de automacao 9238 9239### 4. Implemente Automacao Progressiva 9240 9241Nao tente automatizar tudo de uma vez: 9242- Comece com automacao de backup para sites criticos 9243- Adicione capacidades de restauracao apos provar que backups funcionam 9244- Introduza deteccao e alertas de mudancas 9245- Finalmente, implemente analiticas preditivas 9246 9247## Historias de Sucesso: Organizacoes Liderando o Caminho 9248 9249### Varejista Global Alcanca 99,99% de Uptime 9250 9251Um varejista Fortune 500 gerenciando mais de 2.000 locais transformou suas operacoes: 9252 9253**Desafio:** Processos manuais causando 3-4 grandes interrupcoes mensalmente 9254**Solucao:** Gerenciamento de configuracao totalmente automatizado com predicoes impulsionadas por IA 9255**Resultados:** 9256- 95% de reducao em incidentes relacionados a configuracao 9257- Tempo de recuperacao melhorou de horas para minutos 9258- $2,3 milhoes de economia anual de tempo de inatividade evitado 9259- Satisfacao da equipe de TI aumentou 40% 9260 9261### Rede de Saude Garante Conformidade Continua 9262 9263Uma rede de saude de 150 sites automatizou seu fluxo de trabalho de conformidade: 9264 9265**Desafio:** Relatorios manuais de conformidade levando semanas 9266**Solucao:** Rastreamento automatizado de configuracao com validacao de conformidade integrada 9267**Resultados:** 9268- Dashboards de status de conformidade em tempo real 9269- Tempo de preparacao para auditoria reduzido em 85% 9270- Zero violacoes de conformidade em 18 meses 9271- Habilitou expansao rapida para novos locais 9272 9273### Empresa de Servicos Financeiros Previne Desastres 9274 9275Um grande banco preveniu catastrofes potenciais atraves de automacao: 9276 9277**Desafio:** Desvio de configuracao causando vulnerabilidades de seguranca 9278**Solucao:** Deteccao de desvio impulsionada por IA com remediacao automatica 9279**Resultados:** 9280- 47 incidentes de seguranca potenciais prevenidos 9281- Consistencia de configuracao melhorou para 99,8% 9282- Tempo medio para detectar problemas: Menos de 60 segundos 9283- Reducao de risco estimada: $14 milhoes anualmente 9284 9285## O Caminho Adiante: Seu Roteiro de Automacao 9286 9287### Fase 1: Avaliacao (Semanas 1-4) 9288- Inventarie seu ambiente Meraki atual 9289- Documente processos existentes de backup e recuperacao 9290- Calcule sua exposicao atual ao risco 9291- Construa o caso de negocio para automacao 9292 9293### Fase 2: Fundacao (Semanas 5-8) 9294- Selecione uma plataforma de automacao 9295- Implemente automacao basica de backup 9296- Estabeleca padroes de configuracao 9297- Treine sua equipe em novos processos 9298 9299### Fase 3: Aprimoramento (Semanas 9-12) 9300- Adicione deteccao inteligente de mudancas 9301- Implemente testes automatizados de recuperacao 9302- Crie relatorios de conformidade 9303- Introduza analiticas preditivas 9304 9305### Fase 4: Otimizacao (Continua) 9306- Refine automacao baseada em licoes aprendidas 9307- Expanda cobertura para todos os sistemas criticos 9308- Integre com operacoes de TI mais amplas 9309- Melhore continuamente baseado em metricas 9310 9311## Construindo o Caso de Negocio 9312 9313Ao apresentar automacao para lideranca, foque em: 9314 9315**Beneficios Quantificaveis:** 9316- Reducao de tempo de inatividade: melhoria tipica de 90-95% 9317- Economia de mao de obra: mais de 40 horas mensais apenas em tarefas de backup 9318- Custos de conformidade: 70% de reducao em preparacao para auditoria 9319- Mitigacao de risco: Prevenir media de 2-3 incidentes maiores anualmente 9320 9321**Vantagens Estrategicas:** 9322- Tempo mais rapido para mercado para novos servicos 9323- Postura de seguranca melhorada
9324- Produtividade da equipe aprimorada 9325- Melhor experiencia do cliente 9326 9327**Calculo de ROI:** 9328Para uma rede tipica de 500 dispositivos: 9329- Custo anual de gerenciamento manual: $180.000 9330- Custo anual de plataforma de automacao: $60.000 9331- Economia de incidentes prevenidos: $1,2 milhao 9332- Beneficio anual liquido: $1,32 milhao 9333- Periodo de payback: Menos de 60 dias 9334 9335## Tendencias Emergentes Moldando o Futuro 9336 9337### 1. Redes Auto-Reparadoras 9338Ate 2027, analistas da industria preveem que 30% das redes empresariais auto-diagnosticarao e reparar problemas de configuracao sem intervencao humana. 9339 9340### 2. Redes Baseadas em Intencao 9341Administradores definirao objetivos de negocio, e IA automaticamente gerara e mantera configuracoes otimas. 9342 9343### 3. Seguranca Resistente a Quantum 9344Organizacoes visionarias ja estao implementando criptografia resistente a quantum para gerenciamento de configuracao. 9345 9346### 4. Tecnologia de Gemeo Digital 9347Replicas virtuais de rede permitem testes sem risco de mudancas de configuracao antes da implantacao em producao. 9348 9349## Tome Acao: Comece Sua Jornada de Automacao 9350 9351A evidencia e clara: gerenciamento manual de configuracao Meraki e insustentavel em redes modernas. Cada dia sem automacao aumenta seu risco e custos. 9352 9353**Pontos-Chave:** 93541. **O risco e real:** 92% das organizacoes carecem de automacao adequada 93552. **O impacto e mensuravel:** Custos de inatividade media $5.600-$9.000 por minuto 93563. **A solucao esta comprovada:** Organizacoes automatizadas veem 95% menos incidentes 93574. **O momento e agora:** Adotantes precoces ganham vantagens competitivas 9358 9359Nao espere um desastre de configuracao forcar sua mao. Comece pequeno, prove valor e escale seus esforcos de automacao. Sua rede-e sua equipe-agradecera. 9360 9361--- 9362 9363*Pronto para transformar seu gerenciamento de configuracao Cisco Meraki? Descubra como backup e restauracao automatizados podem proteger sua rede, garantir conformidade e liberar sua equipe para focar em inovacao em vez de combate a incendios.* 9364`},{slug:"network-compliance-biggest-concern",title:"Por Que Conformidade e Agora a Principal Preocupacao em Gerenciamento de Rede",excerpt:"72% das organizacoes relatam que conformidade superou desempenho como sua principal preocupacao. Com multas chegando a â¬345 milhoes e equipes lidando com mais de 13 frameworks, conformidade manual nao e mais viavel.",date:"2025-06-20",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Conformidade",tags:["Compliance","ISO27001","NetworkSecurity","AuditReady","GDPR","SOX"],coverImage:"https://images.unsplash.com/photo-1450101499163-c8848c66ca85?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"8 min",content:` 9365Lembra quando o tempo de atividade da rede era sua maior preocupacao? Esses dias acabaram. Em 2025, 72% das organizacoes relatam que conformidade superou desempenho como sua principal preocupacao de gerenciamento de rede. Com multas regulatorias atingindo recordes-incluindo uma penalidade impressionante de â¬345 milhoes do GDPR no inicio de 2025-as apostas nunca foram tao altas para equipes de rede gerenciando infraestrutura Cisco. 9366 9367Aqui esta o que mantm os CISOs acordados a noite: a organizacao media agora lida com requisitos de conformidade de 13 frameworks regulatorios diferentes, enquanto 63% ja implementaram arquiteturas zero-trust apenas para acompanhar os mandatos em evolucao. Se voce esta gerenciando uma rede Cisco sem capacidades automatizadas de conformidade, voce esta essencialmente voando as cegas em uma tempestade de requisitos regulatorios. 9368 9369## O Alerta de $5 Milhoes 9370 9371A penalidade de $5 milhoes da TSA para a Colonial Pipeline em 2024 enviou ondas de choque pela industria. A mensagem foi clara: falhas de seguranca de rede agora sao falhas de conformidade, e os reguladores nao estao brincando. Mas aqui esta o que a maioria das organizacoes nao percebe-a multa e apen
9371as a ponta do iceberg. 9372 9373Considere os custos reais de falhas de conformidade: 9374- **Penalidades imediatas**: Multas medias do GDPR aumentaram 168% ano a ano em 2024 9375- **Custos de remediacao**: Organizacoes gastam em media $4,2 milhoes em remediacao de conformidade pos-violacao 9376- **Negocios perdidos**: 78% das empresas relatam perder contratos devido a lacunas de conformidade 9377- **Fadiga de auditoria**: Verificacoes manuais de conformidade consomem 2.800 horas anualmente para a empresa media 9378 9379A matematica e simples: prevencao atraves de automacao custa centavos comparado aos dolares gastos em remediacao. 9380 9381## O Desafio de Conformidade Cisco: Por Que Abordagens Tradicionais Falham 9382 9383Gerenciar conformidade em infraestrutura Cisco apresenta desafios unicos. Seja executando DNA Center, ACI ou dispositivos IOS tradicionais, cada plataforma tem sua propria sintaxe de configuracao, requisitos de conformidade e trilhas de auditoria. Nossa pesquisa mostra que 84% dos ambientes Cisco sofrem de desvio de configuracao dentro de 30 dias da implantacao. 9384 9385Aqui esta o porque as abordagens tradicionais de conformidade falham em ambientes Cisco: 9386 9387### 1. **Complexidade de Configuracao** 9388Um unico switch Cisco Catalyst 9300 pode ter mais de 10.000 linhas de configuracao. Multiplique isso por centenas de dispositivos, e a verificacao manual de conformidade se torna impossivel. Os recursos de conformidade do DNA Center ajudam, mas sao limitados a dispositivos sob seu gerenciamento-deixando lacunas em ambientes hibridos. 9389 9390### 2. **Caos Multi-Framework** 9391Redes Cisco modernas devem satisfazer simultaneamente: 9392- **ISO 27001**: Exigindo controles de rede documentados e auditorias regulares 9393- **SOX**: Mandando controle de mudancas e separacao de funcoes 9394- **HIPAA**: Aplicando criptografia e controles de acesso 9395- **PCI DSS**: Exigindo segmentacao de rede e varreduras trimestrais 9396- **Zero Trust**: A nova linha de base exigindo microssegmentacao e verificacao continua 9397 9398Cada framework interpreta "conforme" de forma diferente, criando uma matriz de conformidade que deixaria um grande mestre de xadrez tonto. 9399 9400### 3. **A Bomba-Relogio da Auditoria** 9401Analises da industria revelam que organizacoes usando processos manuais de conformidade gastam 70% mais tempo em auditorias do que aquelas com automacao. Durante uma auditoria tipica, equipes de rede correm para: 9402- Gerar relatorios de configuracao em multiplas plataformas 9403- Provar que nenhuma mudanca nao autorizada ocorreu 9404- Documentar cada desvio da linha de base 9405- Mapear controles tecnicos para requisitos regulatorios 9406 9407Sem automacao, este processo consome semanas de produtividade e ainda deixa espaco para erro humano. 9408 9409## Os Custos Ocultos Que Ninguem Fala 9410 9411Alem das penalidades obvias, a nao-conformidade cria custos em cascata que os CFOs estao apenas comecando a entender: 9412 9413### **Paralisia de Inovacao** 9414Quando 58% das mudancas de rede sao atrasadas devido a preocupacoes de conformidade, a inovacao para. As equipes ficam tao focadas em manter conformidade que nao conseguem implementar melhorias que realmente aumentariam a seguranca. 9415 9416### **Acumulo de Divida Tecnica** 9417O medo de violacoes de conformidade leva ao "acumulo de configuracao"-manter regras e politicas desatualizadas porque ninguem tem certeza se remove-las pode acionar uma violacao. Esta divida tecnica se acumula com o tempo, tornando as redes mais dificeis de gerenciar e mais vulneraveis a ataques. 9418 9419### **Fuga de Talentos** 9420Engenheiros de rede nao se inscreveram para serem oficiais de conformidade. No entanto, gastam 40% do seu tempo em tarefas relacionadas a conformidade. O resultado? Burnout, rotatividade e dificuldade em atrair talentos de ponta que querem inovar, nao documentar. 9421 9422## Sucesso do Mundo Real: Como Lideres Estao Vencendo o Jogo de Conformidade 9423 9424Vamos ver como organizacoes visionarias estao transformando conformidade de um fardo em uma vantagem competitiva: 9425 9426### **Gigante de Servicos Financeiros Reduz Tempo de Auditoria em 85%** 9427Um banco Fortune 500 com mais de 2.000 dispositivos Cisco implementou verificacao automatizada de conformidade em seus ambientes DNA Center e ACI. Resultados: 9428- Tempo de preparacao para auditoria caiu de 6 semanas para 1 semana 9429- Violacoes de configuracao detectadas e remediadas em tempo real 9430- $2,3 milhoes economizados anualmente apenas em custos de auditoria 9431 9432### **Rede de Saude Alcanca Conformidade Continua** 9433Um grande sistema hospitalar gerenciando HIPAA, HITECH e regulacoes estaduais automatizou seus fluxos de trabalho de conformidade. O impacto: 9434- 100% de visibilidade em mudancas de configuracao 9435- Zero violacoes de conformidade nas ultimas tres auditorias 9436- 60% de reducao em incidentes de seguranca devido a conformidade proativa 9437 9438### **Cadeia de Varejo Domina PCI DSS** 9439Com 500 locais e requisitos rigorosos de PCI, este varejista automatizou a verificacao de segmentacao de rede e conformidade de configuracao. Eles agora: 9440- Passam auditorias PCI na metade do tempo 9441- Detectam e remediam violacoes em minutos, nao dias 9442- Economizam $800.000 anualmente em consultores de conformidade 9443 9444## A Vantagem da Automacao: Seu Plano de Jogo de Conformidade 9445 9446A evidencia e esmagadora: 55% das organizacoes planejam investir em monitoramento de conformidade impulsionado por IA em 2025. Aqui esta seu roteiro para se juntar aos vencedores: 9447 9448### **Passo 1: Estabeleca Visibilidade de Linha de Base** 9449Voce nao pode gerenciar o que nao pode ver. Conformidade moderna comeca com: 9450- Monitoramento de configuracao em tempo real em todas as plataformas Cisco 9451- Backup automatizado e controle de versao 9452- Deteccao de mudancas com alertas instantaneos 9453 9454### **Passo 2: Implemente Politica-como-Codigo** 9455Transforme requisitos de conformidade em verificacoes automatizadas: 9456- Converta requisitos regulatorios em politicas tecnicas 9457- Automatize verificacao em toda sua rede 9458- Gere relatorios prontos para auditoria sob demanda 9459 9460### **Passo 3: Habilite Conformidade Continua** 9461Mova de auditorias periodicas para verificacao continua: 9462- Deteccao e remediacao de desvios em tempo real 9463- Pontuacao automatizada de conformidade 9464- Analiticas preditivas para prevenir violacoes antes que ocorram 9465 9466### **Passo 4: Integre com Ferramentas Existentes** 9467Sua solucao de conformidade deve aprimorar, nao substituir, seus investimentos Cisco: 9468- Aproveite APIs do DNA Center para gerenciamento unificado 9469- Integre com ACI para conformidade de data center 9470- Suporte dispositivos IOS tradicionais sem DNA Center 9471 9472## O ROI da Conformidade Automatizada 9473 9474Vamos falar de numeros. Organizacoes implementando conformidade automatizada relatam: 9475- **250% de ROI** em tres anos 9476- **70% de reducao** em tarefas manuais de conformidade 9477- **45% menos** incidentes de seguranca 9478- **30% mais rapido** ciclos de auditoria 9479 9480Mas o valor real? Paz de espirito. Quando conformidade e automatizada, sua equipe pode focar no que faz de melhor-construir e otimizar redes que impulsionam valor de negocio. 9481 9482## Olhando Adiante: Conformidade em 2025 e Alem 9483
9484O cenario regulatorio nao esta desacelerando. Novos requisitos no horizonte incluem: 9485 9486### **Regras de Ciberseguranca da SEC** 9487Empresas publicas agora devem divulgar incidentes materiais de ciberseguranca dentro de 4 dias e descrever suas praticas de gerenciamento de riscos. Equipes de rede precisam de trilhas de auditoria provando sua postura de conformidade em qualquer momento. 9488 9489### **IA e Conformidade de Rede** 9490A medida que o gerenciamento de rede impulsionado por IA se torna padrao, reguladores estao desenvolvendo frameworks para "IA explicavel" em infraestrutura critica. Suas ferramentas de conformidade precisam evoluir de acordo. 9491 9492### **Conformidade Ambiental** 9493A Diretiva de Relatorios de Sustentabilidade Corporativa da UE agora vincula eficiencia de rede a relatorios ESG. Configuracoes de rede eficientes em energia nao sao apenas boa pratica-estao se tornando obrigatorias. 9494 9495## Tome Acao: Sua Transformacao de Conformidade de 90 Dias 9496 9497Pare de tratar conformidade como um mal necessario. Aqui esta seu plano de acao: 9498 9499**Dias 1-30: Avalie e Estabeleca Linha de Base** 9500- Inventarie todos os dispositivos Cisco e seus requisitos de conformidade 9501- Identifique desvios de configuracao e violacoes de politica 9502- Calcule seus custos atuais de conformidade 9503 9504**Dias 31-60: Implemente Vitorias Rapidas** 9505- Implante backup e monitoramento automatizado de configuracao 9506- Crie templates de conformidade para requisitos comuns 9507- Automatize suas verificacoes manuais mais dolorosas 9508 9509**Dias 61-90: Escale e Otimize** 9510- Estenda automacao por toda sua infraestrutura 9511- Integre conformidade em seu processo de gerenciamento de mudancas 9512- Gere seu primeiro relatorio de auditoria automatizado 9513 9514## O Resultado Final 9515 9516Conformidade evoluiu de um exercicio de checkbox para um imperativo estrategico. Organizacoes que abracam conformidade automatizada ganham mais do que aprovacao regulatoria-ganham eficiencia operacional, risco reduzido e liberdade para inovar. 9517 9518A questao nao e se voce vai automatizar conformidade-e se voce fara isso antes ou depois da sua proxima auditoria. Com penalidades regulatorias disparando e ROI de automacao comprovado, a escolha e clara. 9519 9520Pronto para transformar a conformidade da sua rede Cisco de um fardo em uma vantagem competitiva? As ferramentas existem. O ROI esta comprovado. A unica coisa faltando e sua decisao de agir. 9521`},{slug:"true-cost-of-network-configuration-loss",title:"O Custo Real da Perda de Configuracao de Rede: Por Que a Recuperacao Manual Nao e Mais Viavel",excerpt:"Em 2025, 67,7% das empresas experimentaram perda significativa de dados. Quando as configuracoes de rede falham a $9.000/minuto, a recuperacao manual nao e apenas ultrapassada-e financeiramente imprudente.",date:"2025-05-15",author:"Federico Epis",authorImage:"/fepis.jpeg",authorTitle:"CEO",authorBio:"Federico is the CEO and founder of Selent, bringing extensive experience in network automation and AI-driven solutions. He is passionate about helping organizations transform their network operations through intelligent automation.",category:"Melhores Praticas",tags:["NetworkManagement","DisasterRecovery","CiscoMeraki","BusinessContinuity"],coverImage:"https://images.unsplash.com/photo-1451187580459-43490279c0fa?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2340&q=80",featured:!0,draft:!1,readTime:"7 min",content:` 9522Imagine isso: Sao 2:48 da manha. Seu telefone vibra com um alerta urgente. Um switch critico falhou, derrubando metade da sua rede. Sua equipe corre para encontrar a ultima configuracao funcional enquanto tickets de suporte inundam a $9.000 por minuto. Parece familiar? 9523 9524Voce nao esta sozinho. Em 2025, **67,7% das empresas experimentaram perda significativa de dados**, com configuracoes incorretas de rede sendo a principal causa. O velho manual de recuperacao manual? Nao e apenas ultrapassado-e financeiramente imprudente. 9525 9526## O Alerta de $5,4 Bilhoes 9527 9528Os numeros nao mentem, e estao piorando. Quando o erro de configuracao da CrowdStrike derrubou sistemas em todo o mundo em julho de 2024, custou as empresas Fortune 500 **$5,4 bilhoes em apenas 19 horas**. Mas aqui esta o detalhe: esse foi apenas um incidente. 9529 9530Considere estas estatisticas alarmantes de 2025: 9531 9532- **51% das organizacoes** agora relatam perdas mensais superiores a $1 milhao devido a interrupcoes de rede
9533- O custo medio de inatividade de TI subiu para **$9.000 por minuto** (isso e $540.000 por hora) 9534- **86% dos incidentes** envolvem interrupcao significativa de negocios alem do simples tempo de inatividade 9535- Os tempos de recuperacao para problemas relacionados a configuracao chegam a **22 dias** quando feitos manualmente 9536 9537E aqui esta o mais chocante: **93% das empresas** que experimentam perda prolongada de dados vao a falencia. Deixe isso penetrar. 9538 9539## O Efeito Multiplicador Oculto 9540 9541Quando o resolvedor DNS 1.1.1.1 da Cloudflare ficou fora do ar por 62 minutos em julho de 2025 devido a um erro de configuracao que estava dormente por 38 dias, nao foi apenas sobre consultas DNS perdidas. Para milhoes de usuarios, a internet inteira efetivamente desapareceu. 9542 9543Esta falha em cascata ilustra um ponto crucial: a perda de configuracao nao afeta apenas sua rede-cria um efeito domino que multiplica os custos exponencialmente: 9544 9545**Custos Diretos:** 9546- Receita perdida: $5.600-$9.000 por minuto (media da industria) 9547- Suporte de TI de emergencia: $300-$500 por hora por tecnico 9548- Substituicao de hardware: $10.000-$50.000 por dispositivo 9549 9550**Custos Ocultos:** 9551- Tempo de inatividade dos funcionarios: $0,67 por minuto por funcionario afetado 9552- Rotatividade de clientes: 32% dos clientes mudam de provedores apos grandes interrupcoes 9553- Penalidades de conformidade: Ate $50 milhoes por violacoes regulatorias 9554- Dano a reputacao: 73% das empresas relatam impacto duradouro na marca 9555 9556## Por Que os Metodos de Recuperacao Manual Estao Falhando 9557 9558Lembra quando manter backups de configuracao em planilhas e threads de e-mail parecia razoavel? Esses dias acabaram. Aqui esta o porque as abordagens tradicionais estao desmoronando: 9559 9560### 1. **A Explosao de Complexidade** 9561As infraestruturas Cisco modernas nao sao as redes do seu pai. Os ambientes de hoje apresentam: 9562- 10x mais dispositivos do que uma decada atras 9563- Integracoes multi-vendor que exigem conhecimento especializado 9564- Arquiteturas hibridas de nuvem com configuracoes dinamicas 9565- Sistemas automatizados que alteram configuracoes centenas de vezes diariamente 9566 9567Rastreamento manual? Impossivel. 9568 9569### 2. **A Lacuna de Velocidade para Recuperacao** 9570Em quase **um em cada cinco casos**, a exfiltracao de dados acontece dentro da primeira hora de comprometimento. Mas a recuperacao manual tipicamente envolve: 9571- 2-4 horas para localizar o backup correto 9572- 3-6 horas para verificar a integridade da configuracao 9573- 4-8 horas para implementar e testar a recuperacao 9574- 24-48 horas para restauracao completa do servico 9575 9576Isso e uma janela minima de recuperacao de 9 horas quando cada minuto custa milhares. 9577 9578### 3. **O Fator de Erro Humano** 9579Pesquisas da industria mostram que **mais de 80% dos problemas de rede** derivam de gerenciamento inadequado de configuracao e mudancas. Quando voce esta recuperando configuracoes manualmente as 3 da manha sob pressao, as taxas de erro disparam: 9580- 65% de chance de introduzir novas configuracoes incorretas 9581- 40% de probabilidade de perder dependencias criticas 9582- 28% de probabilidade de problemas de incompatibilidade de versao 9583 9584## Desastres de Configuracao do Mundo Real: Aprendendo com os Caidos 9585 9586**Estudo de Caso 1: A Bomba-Relogio Dormente** 9587Quando um erro de configuracao de um grande provedor de CDN permaneceu indetectado por 38 dias antes de acionar uma interrupcao global, destacou uma vulnerabilidade critica: configuracoes legadas podem se esconder como minas terrestres em sua rede. O resultado? 70 paises afetados, milhoes em perdas, e um lembrete claro de que o gerenciamento manual de configuracao e brincar com fogo. 9588 9589**Estudo de Caso 2: O Efeito Cascata** 9590Uma empresa de saude Fortune 500 aprendeu esta licao da maneira dificil. Uma unica rota BGP mal configurada vazou para upstream, propagando-se atraves do provedor de servicos e afetando mais de 300 redes. Tempo de recuperacao: 31 horas. Custo: $14,2 milhoes. Causa: Nenhuma validacao automatizada de configuracao. 9591 9592## A Vantagem da Automacao: De Horas para Minutos 9593 9594Aqui e onde o jogo muda. Solucoes modernas de backup e recuperacao automatizada de configuracao transformam cenarios de desastre em pequenos contratermpos: 9595 9596**Recuperacao Manual Tradicional:** 9597- Tempo de deteccao: 45-90 minutos 9598- Inicio da recuperacao: 2-4 horas 9599- Restauracao completa: 24-72 horas 9600- Taxa de sucesso: 68% 9601 9602**Recuperacao Automatizada:** 9603- Tempo de deteccao: <1 minuto 9604- Inicio da recuperacao: 5-15 minutos 9605- Restauracao completa: 30-120 minutos 9606- Taxa de sucesso: 97% 9607 9608A matematica e simples: a automacao reduz o tempo de recuperacao em 92% enquanto aumenta as taxas de sucesso em 43%. 9609 9610## Construindo Sua Estrategia de Resiliencia de Configuracao 9611 9612Organizacoes inteligentes estao implementando tres estrategias-chave: 9613 9614### 1. **Captura Continua de Configuracao** 9615- Backup em tempo real de cada mudanca de configuracao 9616- Controle de versao com capacidades granulares de rollback 9617- Deteccao automatizada de mudancas e alertas 9618 9619### 2. **Orquestracao Inteligente de Recuperacao** 9620- Restauracao com um clique para qualquer ponto no tempo 9621- Mapeamento automatizado de dependencias 9622- Cenarios de recuperacao pre-validados 9623 9624### 3. **Governanca Proativa de Configuracao** 9625- Verificacao de conformidade contra melhores praticas 9626- Deteccao e remediacao de desvios 9627- Geracao automatizada de documentacao 9628 9629## O ROI e Inegavel 9630 9631Vamos falar de numeros. Para uma empresa de medio porte com 500 dispositivos de rede: 9632 9633**Custos Anuais de Gerenciamento Manual:** 9634- Rastreamento de configuracao: $180.000 (3 FTEs) 9635- Custos medios de inatividade: $2,4 milhoes (4 incidentes maiores) 9636- Preparacao para auditoria de conformidade: $75.000 9637- **Total: $2.655.000** 9638 9639**Custos Anuais de Solucao Automatizada:** 9640- Licenciamento da plataforma: $120.000 9641- Custos reduzidos de inatividade: $240.000 (reducao de 90%) 9642- Automacao de conformidade: $15.000 9643- **Total: $375.000** 9644 9645**Economia Anual Liquida: $2.280.000** 9646**ROI: 760%** 9647**Periodo de Payback: 1,6 meses** 9648 9649## Suas Proximas 48 Horas: Um Plano de Acao 9650 9651O relogio esta correndo. Aqui esta seu roteiro para resiliencia de configuracao: 9652 9653**Hora 1-4:** Audite seu processo atual de gerenciamento de configuracao. Documente cada lacuna. 9654 9655**Hora 5-12:** Calcule seus custos reais de inatividade usando esta formula: 9656- (Receita Anual / 525.600 minutos) x Tempo Medio de Recuperacao x Numero de Incidentes 9657 9658**Hora 13-24:** Avalie solucoes de backup automatizado contra estes criterios: 9659- Capacidades de captura em tempo real 9660- Profundidade de integracao nativa com Cisco 9661- Objetivos de tempo de recuperacao 9662- Recursos de relatorios de conformidade 9663 9664**Hora 25-48:** Implemente uma prova de conceito focando em seus dispositivos mais criticos. 9665 9666## O Futuro e Automatizado (Quer Voce Esteja Pronto ou Nao) 9667 9668A medida que avancamos em 2025, a lacuna entre organizacoes com gerenciamento automatizado de configuracao e aquelas sem se tornara um abismo. Com 70% dos incidentes de seguranca agora visando multiplas superficies de ataque simultaneamente, a recuperacao manual nao e apenas lenta-e uma responsabilidade. 9669 9670A questao nao e se voce vai automatizar seu backup e recuperacao de configuracao. E se voce fara isso antes ou depois da sua proxima grande interrupcao. 9671
9672Lembre-se: Em um mundo onde cada minuto de inatividade custa $9.000, a solucao de backup mais cara e aquela que voce nao tem quando precisa. E no cenario de ameacas de hoje, esse momento esta mais proximo do que voce pensa. 9673 9674--- 9675 9676*Pronto para transformar seu gerenciamento de configuracao de rede de uma vulnerabilidade em uma vantagem competitiva? O tempo para meias medidas passou. Sua rede-e seu negocio-merecem melhor do que recuperacao manual em um mundo automatizado.* 9677`}]};var x2={},y2={},b2={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=function(){for(var r=arguments.length,s=new Array(r),o=0;o<r;o++)s[o]=arguments[o];if(typeof window<"u"){var l;typeof window.gtag>"u"&&(window.dataLayer=window.dataLayer||[],window.gtag=function(){window.dataLayer.push(arguments)}),(l=window).gtag.apply(l,s)}},n=t;e.default=n})(b2);var v2={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=o;var t=/^(a|an|and|as|at|but|by|en|for|if|in|nor|of|on|or|per|the|to|vs?\.?|via)$/i;function n(l){return l.toString().trim().replace(/[A-Za-z0-9\u00C0-\u00FF]+[^\s-]*/g,function(c,u,d){return u>0&&u+c.length!==d.length&&c.search(t)>-1&&d.charAt(u-2)!==":"&&(d.charAt(u+c.length)!=="-"||d.charAt(u-1)==="-")&&d.charAt(u-1).search(/[^\s-]/)<0?c.toLowerCase():c.substr(1).search(/[A-Z]|\../)>-1?c:c.charAt(0).toUpperCase()+c.substr(1)})}function a(l){return typeof l=="string"&&l.indexOf("@")!==-1}var r="REDACTED (Potential Email Address)";function s(l){return a(l)?(console.warn("This arg looks like an email address, redacting."),r):l}function o(){var l=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,d=l||"";return c&&(d=n(l)),u&&(d=s(d)),d}})(v2);(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.GA4=void 0;var t=o(b2),n=o(v2),a=["eventCategory","eventAction","eventLabel","eventValue","hitType"],r=["title","location"],s=["page","hitType"];function o(B){return B&&B.__esModule?B:{default:B}}function l(B,D){if(B==null)return{};var q=c(B,D),F,L;if(Object.getOwnPropertySymbols){var U=Object.getOwnPropertySymbols(B);for(L=0;L<U.length;L++)F=U[L],!(D.indexOf(F)>=0)&&Object.prototype.propertyIsEnumerable.call(B,F)&&(q[F]=B[F])}return q}function c(B,D){if(B==null)return{};var q={},F=Object.keys(B),L,U;for(U=0;U<F.length;U++)L=F[U],!(D.indexOf(L)>=0)&&(q[L]=B[L]);return q}function u(B){"@babel/helpers - typeof";return u=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(D){return typeof D}:function(D){return D&&typeof Symbol=="function"&&D.constructor===Symbol&&D!==Symbol.prototype?"symbol":typeof D},u(B)}function d(B){return f(B)||p(B)||b(B)||m()}function m(){throw new TypeError(`Invalid attempt to spread non-iterable instance. 9678In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function p(B){if(typeof Symbol<"u"&&B[Symbol.iterator]!=null||B["@@iterator"]!=null)return Array.from(B)}function f(B){if(Array.isArray(B))return v(B)}function g(B,D){var q=Object.keys(B);if(Object.getOwnPropertySymbols){var F=Object.getOwnPropertySymbols(B);D&&(F=F.filter(function(L){return Object.getOwnPropertyDescriptor(B,L).enumerable})),q.push.apply(q,F)}return q}function y(B){for(var D=1;D<arguments.length;D++){var q=arguments[D]!=null?arguments[D]:{};D%2?g(Object(q),!0).forEach(function(F){H(B,F,q[F])}):Object.getOwnPropertyDescriptors?Object.defineProperties(B,Object.getOwnPropertyDescriptors(q)):g(Object(q)).forEach(function(F){Object.defineProperty(B,F,Object.getOwnPropertyDescriptor(q,F))})}return B}function w(B,D){return I(B)||N(B,D)||b(B,D)||x()}function x(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. 9679In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function b(B,D){if(B){if(typeof B=="string")return v(B,D);var q=Object.prototype.toString.call(B).slice(8,-1);if(q==="Object"&&B.constructor&&(q=B.constructor.name),q==="Map"||q==="Set")return Array.from(B);if(q==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(q))return v(B,D)}}function v(B,D){(D==null||D>B.length)&&(D=B.length);for(var q=0,F=new Array(D);q<D;q++)F[q]=B[q];return F}function N(B,D){var q=B==null?null:typeof Symbol<"u"&&B[Symbol.iterator]||B["@@iterator"];if(q!=null){var F,L,U,A,te=[],ae=!0,j=!1;try{if(U=(q=q.call(B)).next,D!==0)for(;!(ae=(F=U.call(q)).done)&&(te.push(F.value),te.length!==D);ae=!0);}catch(de){j=!0,L=de}
9679finally{try{if(!ae&&q.return!=null&&(A=q.return(),Object(A)!==A))return}finally{if(j)throw L}}return te}}function I(B){if(Array.isArray(B))return B}function C(B,D){if(!(B instanceof D))throw new TypeError("Cannot call a class as a function")}function R(B,D){for(var q=0;q<D.length;q++){var F=D[q];F.enumerable=F.enumerable||!1,F.configurable=!0,"value"in F&&(F.writable=!0),Object.defineProperty(B,P(F.key),F)}}function O(B,D,q){return D&&R(B.prototype,D),Object.defineProperty(B,"prototype",{writable:!1}),B}function H(B,D,q){return D=P(D),D in B?Object.defineProperty(B,D,{value:q,enumerable:!0,configurable:!0,writable:!0}):B[D]=q,B}function P(B){var D=Y(B,"string");return u(D)==="symbol"?D:String(D)}function Y(B,D){if(u(B)!=="object"||B===null)return B;var q=B[Symbol.toPrimitive];if(q!==void 0){var F=q.call(B,D);if(u(F)!=="object")return F;throw new TypeError("@@toPrimitive must return a primitive value.")}return(D==="string"?String:Number)(B)}var K=function(){function B(){var D=this;C(this,B),H(this,"reset",function(){D.isInitialized=!1,D._testMode=!1,D._currentMeasurementId,D._hasLoadedGA=!1,D._isQueuing=!1,D._queueGtag=[]}),H(this,"_gtag",function(){for(var q=arguments.length,F=new Array(q),L=0;L<q;L++)F[L]=arguments[L];D._testMode||D._isQueuing?D._queueGtag.push(F):t.default.apply(void 0,F)}),H(this,"_loadGA",function(q,F){var L=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"https://www.googletagmanager.com/gtag/js";if(!(typeof window>"u"||typeof document>"u")&&!D._hasLoadedGA){var U=document.createElement("script");U.async=!0,U.src="".concat(L,"?id=").concat(q),F&&U.setAttribute("nonce",F),document.body.appendChild(U),window.dataLayer=window.dataLayer||[],window.gtag=function(){window.dataLayer.push(arguments)},D._hasLoadedGA=!0}}),H(this,"_toGtagOptions",function(q){if(q){var F={cookieUpdate:"cookie_update",cookieExpires:"cookie_expires",cookieDomain:"cookie_domain",cookieFlags:"cookie_flags",userId:"user_id",clientId:"client_id",anonymizeIp:"anonymize_ip",contentGroup1:"content_group1",contentGroup2:"content_group2",contentGroup3:"content_group3",contentGroup4:"content_group4",contentGroup5:"content_group5",allowAdFeatures:"allow_google_signals",allowAdPersonalizationSignals:"allow_ad_personalization_signals",nonInteraction:"non_interaction",page:"page_path",hitCallback:"event_callback"},L=Object.entries(q).reduce(function(U,A){var te=w(A,2),ae=te[0],j=te[1];return F[ae]?U[F[ae]]=j:U[ae]=j,U},{});return L}}),H(this,"initialize",function(q){var F=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!q)throw new Error("Require GA_MEASUREMENT_ID");var L=typeof q=="string"?[{trackingId:q}]:q;D._currentMeasurementId=L[0].trackingId;var U=F.gaOptions,A=F.gtagOptions,te=F.nonce,ae=F.testMode,j=ae===void 0?!1:ae,de=F.gtagUrl;if(D._testMode=j,j||D._loadGA(D._currentMeasurementId,te,de),D.isInitialized||(D._gtag("js",new Date),L.forEach(function(pt){var en=y(y(y({},D._toGtagOptions(y(y({},U),pt.gaOptions))),A),pt.gtagOptions);Object.keys(en).length?D._gtag("config",pt.trackingId,en):D._gtag("config",pt.trackingId)})),D.isInitialized=!0,!j){var wt=d(D._queueGtag);for(D._queueGtag=[],D._isQueuing=!1;wt.length;){var ye=wt.shift();D._gtag.apply(D,d(ye)),ye[0]==="get"&&(D._isQueuing=!0)}}}),H(this,"set",function(q){if(!q){console.warn("`fieldsObject` is required in .set()");return}if(u(q)!=="object"){console.warn("Expected `fieldsObject` arg to be an Object");return}Object.keys(q).length===0&&console.warn("empty `fieldsObject` given to .set()"),D._gaCommand("set",q)}),H(this,"_gaCommandSendEvent",function(q,F,L,U,A){D._gtag("event",F,y(y({event_category:q,event_label:L,value:U},A&&{non_interaction:A.nonInteraction}),D._toGtagOptions(A)))}),H(this,"_gaCommandSendEventParameters",function(){for(var q=arguments.length,F=new Array(q),L=0;L<q;L++)F[L]=arguments[L];if(typeof F[0]=="string")D._gaCommandSendEvent.apply(D,d(F.slice(1)));else{var U=F[0],A=U.eventCategory,te=U.eventAction,ae=U.eventLabel,j=U.eventValue;U.hitType;var de=l(U,a);D._gaCommandSendEvent(A,te,ae,j,de)}}),H(this,"_gaCommandSendTiming",function(q,F,L,U){D._gtag("event","timing_complete",{name:F,value:L,event_category:q,event_label:U})}
9679),H(this,"_gaCommandSendPageview",function(q,F){if(F&&Object.keys(F).length){var L=D._toGtagOptions(F),U=L.title,A=L.location,te=l(L,r);D._gtag("event","page_view",y(y(y(y({},q&&{page_path:q}),U&&{page_title:U}),A&&{page_location:A}),te))}else q?D._gtag("event","page_view",{page_path:q}):D._gtag("event","page_view")}),H(this,"_gaCommandSendPageviewParameters",function(){for(var q=arguments.length,F=new Array(q),L=0;L<q;L++)F[L]=arguments[L];if(typeof F[0]=="string")D._gaCommandSendPageview.apply(D,d(F.slice(1)));else{var U=F[0],A=U.page;U.hitType;var te=l(U,s);D._gaCommandSendPageview(A,te)}}),H(this,"_gaCommandSend",function(){for(var q=arguments.length,F=new Array(q),L=0;L<q;L++)F[L]=arguments[L];var U=typeof F[0]=="string"?F[0]:F[0].hitType;switch(U){case"event":D._gaCommandSendEventParameters.apply(D,F);break;case"pageview":D._gaCommandSendPageviewParameters.apply(D,F);break;case"timing":D._gaCommandSendTiming.apply(D,d(F.slice(1)));break;case"screenview":case"transaction":case"item":case"social":case"exception":console.warn("Unsupported send command: ".concat(U));break;default:console.warn("Send command doesn't exist: ".concat(U))}}),H(this,"_gaCommandSet",function(){for(var q=arguments.length,F=new Array(q),L=0;L<q;L++)F[L]=arguments[L];typeof F[0]=="string"&&(F[0]=H({},F[0],F[1])),D._gtag("set",D._toGtagOptions(F[0]))}),H(this,"_gaCommand",function(q){for(var F=arguments.length,L=new Array(F>1?F-1:0),U=1;U<F;U++)L[U-1]=arguments[U];switch(q){case"send":D._gaCommandSend.apply(D,L);break;case"set":D._gaCommandSet.apply(D,L);break;default:console.warn("Command doesn't exist: ".concat(q))}}),H(this,"ga",function(){for(var q=arguments.length,F=new Array(q),L=0;L<q;L++)F[L]=arguments[L];if(typeof F[0]=="string")D._gaCommand.apply(D,F);else{var U=F[0];D._gtag("get",D._currentMeasurementId,"client_id",function(A){D._isQueuing=!1;var te=D._queueGtag;for(U({get:function(de){return de==="clientId"?A:de==="trackingId"?D._currentMeasurementId:de==="apiVersion"?"1":void 0}});te.length;){var ae=te.shift();D._gtag.apply(D,d(ae))}}),D._isQueuing=!0}return D.ga}),H(this,"event",function(q,F){if(typeof q=="string")D._gtag("event",q,D._toGtagOptions(F));else{var L=q.action,U=q.category,A=q.label,te=q.value,ae=q.nonInteraction,j=q.transport;if(!U||!L){console.warn("args.category AND args.action are required in event()");return}var de={hitType:"event",eventCategory:(0,n.default)(U),eventAction:(0,n.default)(L)};A&&(de.eventLabel=(0,n.default)(A)),typeof te<"u"&&(typeof te!="number"?console.warn("Expected `args.value` arg to be a Number."):de.eventValue=te),typeof ae<"u"&&(typeof ae!="boolean"?console.warn("`args.nonInteraction` must be a boolean."):de.nonInteraction=ae),typeof j<"u"&&(typeof j!="string"?console.warn("`args.transport` must be a string."):(["beacon","xhr","image"].indexOf(j)===-1&&console.warn("`args.transport` must be either one of these values: `beacon`, `xhr` or `image`"),de.transport=j)),D._gaCommand("send",de)}}),H(this,"send",function(q){D._gaCommand("send",q)}),this.reset()}return O(B,[{key:"gtag",value:function(){this._gtag.apply(this,arguments)}}]),B}();e.GA4=K;var ie=new K;e.default=ie})(y2);(function(e){function t(l){"@babel/helpers - typeof";return t=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(c){return typeof c}:function(c){return c&&typeof Symbol=="function"&&c.constructor===Symbol&&c!==Symbol.prototype?"symbol":typeof c},t(l)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.ReactGAImplementation=void 0;var n=r(y2);function a(l){if(typeof WeakMap!="function")return null;var c=new WeakMap,u=new WeakMap;return(a=function(m){return m?u:c})(l)}function r(l,c){if(l&&l.__esModule)return l;if(l===null||t(l)!=="object"&&typeof l!="function")return{default:l};var u=a(c);if(u&&u.has(l))return u.get(l);var d={},m=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var p in l)if(p!=="default"&&Object.prototype.hasOwnProperty.call(l,p)){var f=m?Object.getOwnPropertyDescriptor(l,p):null;f&&(f.get||f.set)?Object.defineProperty(d,p,f):d[p]=l[p]}return d.default=l,u&&u.set(l,d),d}var s=n.GA4;e.ReactGAImplementation=s;var o=n.default;e.default=o})(x2);const Jt=yi(x2),x5=()=>{Jt.initialize("G-647KKT2ER9")},y5=()=>{typeof window<"u"&&window.gtag&&window.gtag("event","conversion",{send_to:"AW-17424236778/uRHiCLHFtv0aEOqBw_RA",value:1,currency:"USD"})},b5=e=>{Jt.send({hitType:"pageview",page:e})},Dn=e=>{Jt.event({category:"conversion",action:"demo_request",label:e}),typeof window<"u"&&window.gtag&&window.gtag("event","conversion",{send_to:"AW-17424236778/demo_conversion",value:25,currency:"USD",event_category:"conversion",event_label:e})},Tl=(e,t)=>
9679{Jt.event({category:"navigation",action:"navigate",label:`${t} -> ${e}`})},v5=(e,t,n)=>{Jt.event({category:"content",action:"blog_view",label:e,article_slug:t,article_category:n})},hx=e=>{Jt.event({category:"engagement",action:"login_click",label:e})},Yo=(e,t)=>{Jt.event({category:"social",action:"social_click",label:`${e} from ${t}`})},w5=e=>{Jt.event({category:"content",action:"blog_search",label:e})},k5=(e,t)=>{Jt.event({category:"content",action:"blog_filter",label:`${e}: ${t}`})},Ur=(e,t)=>{Jt.event({category:"content",action:"blog_pagination",label:t,value:e})},fx=(e,t)=>{Jt.event({category:"signup",action:"signup_step",label:`Step ${e} - ${t}`,value:e})},A5=e=>{Jt.event({category:"conversion",action:"signup_complete",label:e?"with_demo":"without_demo"}),typeof window<"u"&&window.gtag&&window.gtag("event","conversion",{send_to:"AW-17424236778/signup_conversion",value:e?50:30,currency:"USD",event_category:"conversion",event_label:e?"signup_with_demo":"signup_without_demo"})},fo=()=>{const e=ia(),t=e.pathname==="/"?"homepage":e.pathname.slice(1);return i.jsxs("header",{className:"w-full sticky top-0 z-50 glass-card backdrop-blur-xl border-b border-dark-border/50",children:[i.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:i.jsxs("div",{className:"flex justify-between items-center py-5",children:[i.jsx(Ne,{to:"/",className:"flex",onClick:()=>Tl("homepage",t),children:i.jsx("img",{alt:"Selent logo",src:"/logo_white.png",className:"h-12 w-auto object-contain",style:{marginLeft:"-8px"}})}),i.jsx("nav",{className:"hidden md:flex space-x-10"}),i.jsxs("div",{className:"flex items-center space-x-5",children:[i.jsxs(Ne,{to:"/blog",className:"text-sm font-medium transition-colors group relative text-gray-300 hover:text-accent-cyan",onClick:()=>Tl("blog",t),children:["Blog",i.jsx("span",{className:"absolute -bottom-1 left-0 w-0 h-0.5 transition-all duration-300 group-hover:w-full bg-accent-cyan"})]}),i.jsx("a",{href:"https://app.selent.ai",target:"_blank",rel:"noopener noreferrer",onClick:()=>hx("header"),children:i.jsx("button",{className:"px-4 py-2 text-sm font-medium rounded-md transition-all duration-200 glass-card text-gray-300 hover:text-white hover:border-accent-cyan/50",children:"Login"})}),i.jsxs("button",{className:"md:hidden p-2 rounded-md transition-colors hover:bg-dark-card",children:[i.jsx("span",{className:"sr-only",children:"Open main menu"}),i.jsxs("div",{className:"flex flex-col space-y-1.5",children:[i.jsx("span",{"aria-hidden":"true",className:"block w-6 h-0.5 bg-gray-300"}),i.jsx("span",{"aria-hidden":"true",className:"block w-6 h-0.5 bg-gray-300"}),i.jsx("span",{"aria-hidden":"true",className:"block w-6 h-0.5 bg-gray-300"})]})]})]})]})}),i.jsxs("div",{className:"hidden",children:[i.jsxs("div",{className:"px-4 py-6 space-y-6",children:[i.jsx(Ne,{to:"/signup",className:"block w-full",onClick:()=>Dn("header-mobile"),children:i.jsx("button",{className:"w-full px-4 py-2 text-sm font-medium rounded-md transition-colors bg-accent-cyan text-dark-base hover:bg-accent-cyan-dark",children:"Request Demo"})}),i.jsx("a",{href:"https://app.selent.ai",target:"_blank",rel:"noopener noreferrer",className:"block w-full",onClick:()=>hx("header-mobile"),children:i.jsx("button",{className:"w-full px-4 py-2 text-sm font-medium rounded-md transition-colors glass-card text-gray-300 hover:text-white hover:border-accent-cyan/50",children:"Login"})})]}),i.jsx("nav",{className:"px-4 py-6 space-y-4",children:i.jsx(Ne,{to:"/blog",className:"block text-base font-medium text-gray-300",onClick:()=>Tl("blog",t),children:"Blog"})})]})]})},go=()=>i.jsxs("footer",{className:"bg-[#0A0A0B] border-t border-[#1A1A1D]",children:[i.jsx("div",{className:"flex flex-col px-6 lg:px-[120px] py-16",children:i.jsxs("div",{className:"flex flex-col gap-5",children:[i.jsx("span",{className:"font-mono text-[24px] font-bold text-white",children:"selent"}),i.jsx("p",{className:"text-[14px] leading-[1.6] text-[#94A3B8]",children:"Enterprise network management, simplified with AI."}),i.jsxs("div",{className:"flex gap-4",children:[i.jsx("a",{href:"https://twitter.com/selentai",target:"_blank",rel:"noopener noreferrer","aria-label":"Twitter",className:"text-[#64748B] hover:text-white transition-colors",children:i.jsx("svg",{className:"w-5 h-5",fill:"currentColor",viewBox:"0 0 24 24",children:i.jsx("path",{d:"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"})})}),i.jsx("a",{href:"https://github.com/selent-ai",target:"_blank",rel:"noopener noreferrer","aria-label":"GitHub",className:"text-[#64748B] hover:text-white transition-colors",children:i.jsx("svg",{className:"w-5 h-5",fill:"currentColor",viewBox:"0 0 24 24",children:i.jsx("path",{d:"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158
9679-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"})})}),i.jsx("a",{href:"https://www.linkedin.com/company/selentai/",target:"_blank",rel:"noopener noreferrer","aria-label":"LinkedIn",className:"text-[#64748B] hover:text-white transition-colors",children:i.jsx("svg",{className:"w-5 h-5",fill:"currentColor",viewBox:"0 0 24 24",children:i.jsx("path",{d:"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"})})})]})]})}),i.jsx("div",{className:"h-px bg-[#1A1A1D]"}),i.jsxs("div",{className:"flex flex-col sm:flex-row items-center justify-between px-6 lg:px-[120px] py-6",children:[i.jsxs("span",{className:"text-[13px] text-[#475569]",children:["© ",new Date().getFullYear()," selent. All rights reserved."]}),i.jsxs("div",{className:"flex items-center gap-6",children:[i.jsx(Ne,{to:"/privacy",className:"text-[13px] text-[#475569] hover:text-white transition-colors",children:"Privacy"}),i.jsx(Ne,{to:"/terms",className:"text-[13px] text-[#475569] hover:text-white transition-colors",children:"Terms"})]})]}),i.jsx("div",{className:"h-8"})]}),C5={en:{header:{blog:"Blog",login:"Login"},hero:{badge:"Official Cisco Meraki Technology Partner",title:"Protect your Cisco Meraki networks before it's too late",subtitle:"",description:`A mistake or a poorly executed change shouldn't put your operation at risk. 9680 9681Selent automates backups, audits changes, and lets you restore Cisco Meraki configurations in seconds.`,ctaDemo:"Request Demo",trustedBy:"Trusted by:"},stats:{automated:{value:"100%",title:"Automated",subtitle:"Configuration backup"},deviceTypes:{value:"All",title:"Device Types",subtitle:"MX, MS, MR, MV"},apiCoverage:{value:"API v1",title:"Full Coverage",subtitle:"Dashboard API"},uptime:{value:"99.9%",title:"Uptime SLA",subtitle:"Enterprise ready"}},features:{badge:"Core Features",title:"Did you know that reverting misconfigurations in Cisco Meraki can be slow without additional tools?",description:"A mistake or a poorly executed change can leave you without a quick way to roll back, putting business continuity at risk. Selent provides tools specifically designed to operate Cisco Meraki safely and at scale.",backup:{title:"Cisco Meraki Configuration Backup",description:"Automated backup for all your Cisco Meraki devices - MX firewalls, MS switches, MR access points, and MV cameras.",features:["Full Dashboard API integration","Network-wide configuration snapshots","Template and policy backup","Cross-org configuration sync"],badge:"Popular"},changeDetection:{title:"Intelligent Change Detection",description:"AI analyzes your Cisco Meraki configuration changes and explains their impact in plain English.",features:["VLAN and subnet change tracking","Firewall rule impact analysis","Wireless SSID modifications","Switch port configuration alerts"]},search:{title:"Natural Language Search",description:"Search across all your Cisco Meraki configurations using plain English queries.",features:["Find devices by IP or MAC","Search firewall rules by port","Locate VLANs and subnets","Query wireless settings"],badge:"AI-Powered"},compliance:{title:"Cisco Meraki Compliance Monitoring",description:"Ensure your Cisco Meraki networks meet security standards and organizational policies.",features:["PCI DSS compliance checks","802.1X authentication audit","Firewall rule validation","Guest network isolation verify"],badge:"Coming Soon"}},howItWorks:{badge:"How It Works",title:"Connect Your Cisco Meraki Dashboard",description:"Get started in minutes with your existing Cisco Meraki API key",step1:{title:"Connect Cisco Meraki Dashboard",description:"Add your Cisco Meraki API key and select organizations. We support both v0 and v1 Dashboard APIs.",terminal:{connecting:"> Connecting to Dashboard API...",orgsFound:"> Organizations: 5 found",networksDiscovered:"> Networks: 47 discovered",devices:"> Devices: MX, MS, MR, MV â"}},step2:{title:"Select Backup Scope",description:"Choose which Cisco Meraki networks and device types to backup. Set schedules per organization or network.",mxFirewalls:"MX Firewalls",msSwitches:"MS Switches",mrAccessPoints:"MR Access Points",backupSchedule:"Backup schedule: Every 6 hours"},step3:{title:"Manage & Restore",description:"Track Cisco Meraki config changes, search across all devices, and restore any previous state instantly.",latestBackup:"Latest Backup",dashboardSync:"â Dashboard sync active",changeDetection:"â Change detection on",webhookAlerts:"â Webhook alerts ready"}},blog:{badge:"INSIGHTS",title:"Latest Insights",description:"Network optimization strategies and best practices",viewAll:"View all insights"},pricing:{badge:"Pricing Plans",title:"Simple, Transparent Pricing",description:"Choose the plan that fits your organization's needs.",essential:{name:"Essential",price:"$1.80",period:"per device/month",description:"Core backup and restore",features:["Configuration backup & restore","Weekly automated backups","180-day retention period","Email notifications","Standard support"],cta:"Start Free Trial"},enterprise:{name:"Enterprise",price:"Contact",period:"Custom pricing",description:"Advanced features & support",features:["Everything in Essential","Daily automated backups","360-day retention period","AI semantic log search","Dedicated support team","Priority response times","Custom integrations"],cta:"Contact Sales",badge:"RECOMMENDED"},addons:{title:"Available Add-ons",multiClient:{title:"Multi-Client Support",description:"Ideal for MSPs and service providers",features:["Manage multiple client organizations","Segregated client data & access","White-label dashboard options"]},compliance:{title:"AI Compliance Agent",description:"Automated compliance monitoring",features:["Real-time compliance checking","Automated remediation suggestions","Compliance reporting & audits"],badge:"Coming Soon"}}},partners:{badge:"OFFICIAL PARTNERSHIPS",title:"Industry Leaders",poweredBy:"Powered by",description:"Deep integrations with enterprise platforms to deliver seamless AI-powered network intelligence",meraki:{title:"Cisco Meraki Technology Partner",description:"Official technology partner with deep API integration and certified compatibility"},selectDev:{title:"Cisco Select Developer",description:"Elite developer status with advanced platform access and priority support"}},cta:{title:"Ready to operate Cisco Meraki without unnecessary risk?",description:"Start protecting your configurations, tracking changes, and rolling back in seconds with Selent.",button:"Start Free Trial",features:{trial:"14-day free trial",noCard:"No credit card",instant:"Instant activation"}},footer:{description:"Enterprise network management, simplified with AI",resources:"Resources",company:"Company",contact:"Contact",terms:"Terms of Service",privacy:"Privacy Policy",rights:"© 2025 Selent. All rights reserved."},topology:{autoBackup:"Auto Backup",every6h:"Every 6 hours",aiAnalysis:"AI Analysis",realtime:"Real-time",instantRestore:"Instant Restore",oneClick:"O
9681ne-click"},signup:{pageTitle:"Start Free Trial",backToSite:"Back to site",steps:{email:{title:"Let's get started",subtitle:"Enter your corporate email to begin your free trial",label:"Work Email",placeholder:"[email protected]",corporateNote:"Please use your corporate email address"},contact:{title:"Tell us about yourself",subtitle:"Help us personalize your experience",firstName:"First Name",lastName:"Last Name",phone:"Phone Number",company:"Company"},painPoints:{title:"What challenges are you facing?",subtitle:"Tell us about your network operations pain points",label:"Describe your challenges",placeholder:"e.g., Configuration backup and restore, change tracking, compliance monitoring..."},otherTools:{title:"Current tools",subtitle:"Are you currently using any network management tools?"},demo:{title:"Would you like a demo?",subtitle:"Schedule a personalized demo to see how Selent can help your team"}},howDidYouHear:{title:"How did you hear about Selent?",options:{onlineSearch:"Online Search",socialMedia:"Social Media",referral:"Referral",advertisement:"Advertisement",event:"Event or Conference",other:"Other"}},errors:{emailRequired:"Email is required",emailInvalid:"Please enter a valid email address",emailCorporate:"Please use a corporate email address",firstNameRequired:"First name is required",lastNameRequired:"Last name is required",companyRequired:"Company name is required",painPointsRequired:"Please describe your challenges",howDidYouHearRequired:"Please select an option",usesOtherToolsRequired:"Please select an option",wantsDemoRequired:"Please select an option"},common:{back:"Back",continue:"Continue",submit:"Submit",submitting:"Submitting...",yes:"Yes",no:"No"},success:{title:"You're all set!",description:"Our team will review your request. We'll send you the link to start your trial shortly.",emailSent:"We'll contact you at {email} with instructions to access your free trial.",demoRedirect:"Redirecting you to schedule your demo...",backToHome:"Back to homepage"},trustIndicators:{secure:"Your data is secure and will never be shared with third parties"}},blogPage:{title:"Selent Blog",subtitle:"Insights and best practices for network management",searchPlaceholder:"Search articles...",allCategory:"All",noPosts:"No Blog Posts Yet",noPostsDescription:"We're working on creating valuable content for you. Check back soon!",noResults:"No articles found matching your criteria.",backToBlog:"Back to Blog",relatedArticles:"Related Articles",readTime:"read",ctaReady:"READY TO TRANSFORM?",ctaTitle:"Automate Your Network Management",ctaDescription:"Discover how Selent can help you automate your Cisco Meraki configuration management with AI-driven intelligence and enterprise-grade security.",ctaButton:"Request a Demo",ctaSubtext:"Get personalized insights for your organization's specific needs"}},es:{header:{blog:"Blog",login:"Iniciar Sesión"},hero:{badge:"Partner Oficial de Cisco Meraki Technology",title:"Protege tus redes Cisco Meraki antes de que sea tarde",subtitle:"",description:`Un error o un cambio mal ejecutado no deberÃa comprometer tu operación. 9682 9683Selent automatiza backups, audita cambios y permite restaurar configuraciones Cisco Meraki en segundos.`,ctaDemo:"Solicitar Demo",trustedBy:"ConfÃan en nosotros:"},stats:{automated:{value:"100%",title:"Automatizado",subtitle:"Respaldo de configuración"},deviceTypes:{value:"Todos",title:"Tipos de Dispositivos",subtitle:"MX, MS, MR, MV"},apiCoverage:{value:"API v1",title:"Cobertura Completa",subtitle:"Dashboard API"},uptime:{value:"99.9%",title:"SLA de Disponibilidad",subtitle:"Listo para empresas"}},features:{badge:"CaracterÃsticas Principales",title:"¿SabÃas que revertir cambios erróneos en Cisco Meraki puede ser lento sin herramientas adicionales?",description:"Un error o un cambio mal ejecutado puede dejarte sin una forma rápida de volver atrás, comprometiendo la continuidad del negocio. Selent incorpora herramientas diseñadas especÃficamente para operar Cisco Meraki de forma segura y escalable.",backup:{title:"Respaldo de Configuración Cisco Meraki",description:"Respaldo automatizado para todos tus dispositivos Cisco Meraki - Firewalls MX, switches MS, puntos de acceso MR y cámaras MV.",features:["Integración completa con Dashboard API","Snapshots de configuración de toda la red","Respaldo de plantillas y polÃticas","Sincronización de configuración entre organizaciones"],badge:"Popular"},changeDetection:{title:"Detección Inteligente de Cambios",description:"La IA analiza los cambios en tu configuración Cisco Meraki y explica su impacto en lenguaje simple.",features:["Seguimiento de cambios en VLAN y subredes","Análisis de impacto de reglas de firewall","Modificaciones de SSID inalámbrico","Alertas de configuración de puertos"]},search:{title:"Búsqueda en Lenguaje Natural",description:"Busca en todas tus configuraciones Cisco Meraki usando consultas en lenguaje simple.",features:["Encuentra dispositivos por IP o MAC","Busca reglas de firewall por puerto","Localiza VLANs y subredes","Consulta configuraciones inalámbricas"],badge:"Con IA"}
9683,compliance:{title:"Monitoreo de Cumplimiento Cisco Meraki",description:"Asegura que tus redes Cisco Meraki cumplan con los estándares de seguridad y polÃticas organizacionales.",features:["Verificaciones de cumplimiento PCI DSS","AuditorÃa de autenticación 802.1X","Validación de reglas de firewall","Verificación de aislamiento de red de invitados"],badge:"Próximamente"}},howItWorks:{badge:"Cómo Funciona",title:"Conecta tu Dashboard Cisco Meraki",description:"Comienza en minutos con tu clave API Cisco Meraki existente",step1:{title:"Conectar Dashboard Cisco Meraki",description:"Agrega tu clave API Cisco Meraki y selecciona organizaciones. Soportamos Dashboard APIs v0 y v1.",terminal:{connecting:"> Conectando a Dashboard API...",orgsFound:"> Organizaciones: 5 encontradas",networksDiscovered:"> Redes: 47 descubiertas",devices:"> Dispositivos: MX, MS, MR, MV â"}},step2:{title:"Seleccionar Alcance de Respaldo",description:"Elige qué redes Cisco Meraki y tipos de dispositivos respaldar. Configura programaciones por organización o red.",mxFirewalls:"Firewalls MX",msSwitches:"Switches MS",mrAccessPoints:"Puntos de Acceso MR",backupSchedule:"Programación de respaldo: Cada 6 horas"},step3:{title:"Gestionar y Restaurar",description:"Rastrea cambios de configuración Cisco Meraki, busca en todos los dispositivos y restaura cualquier estado anterior instantáneamente.",latestBackup:"Ãltimo Respaldo",dashboardSync:"â Sincronización Dashboard activa",changeDetection:"â Detección de cambios activada",webhookAlerts:"â Alertas webhook listas"}},blog:{badge:"PERSPECTIVAS",title:"Ãltimas Perspectivas",description:"Estrategias de optimización de red y mejores prácticas",viewAll:"Ver todas las perspectivas"},pricing:{badge:"Planes de Precios",title:"Precios Simples y Transparentes",description:"Elige el plan que se ajuste a las necesidades de tu organización.",essential:{name:"Esencial",price:"$1.80",period:"por dispositivo/mes",description:"Respaldo y restauración básicos",features:["Respaldo y restauración de configuración","Respaldos automáticos semanales","PerÃodo de retención de 180 dÃas","Notificaciones por correo","Soporte estándar"],cta:"Iniciar Prueba Gratuita"},enterprise:{name:"Empresarial",price:"Contactar",period:"Precios personalizados",description:"CaracterÃsticas avanzadas y soporte",features:["Todo lo de Esencial","Respaldos automáticos diarios","PerÃodo de retención de 360 dÃas","Búsqueda semántica de logs con IA","Equipo de soporte dedicado","Tiempos de respuesta prioritarios","Integraciones personalizadas"],cta:"Contactar Ventas",badge:"RECOMENDADO"},addons:{title:"Complementos Disponibles",multiClient:{title:"Soporte Multi-Cliente",description:"Ideal para MSPs y proveedores de servicios",features:["Gestiona múltiples organizaciones cliente","Datos y acceso de clientes segregados","Opciones de dashboard de marca blanca"]},compliance:{title:"Agente de Cumplimiento IA",description:"Monitoreo de cumplimiento automatizado",features:["Verificación de cumplimiento en tiempo real","Sugerencias de remediación automatizadas","Informes y auditorÃas de cumplimiento"],badge:"Próximamente"}}},partners:{badge:"ALIANZAS OFICIALES",title:"LÃderes de la Industria",poweredBy:"Impulsado por",description:"Integraciones profundas con plataformas empresariales para ofrecer inteligencia de red con IA sin interrupciones",meraki:{title:"Partner Tecnológico Cisco Meraki",description:"Partner tecnológico oficial con integración API profunda y compatibilidad certificada"},selectDev:{title:"Desarrollador Select de Cisco",description:"Estatus de desarrollador élite con acceso avanzado a plataforma y soporte prioritario"}},cta:{title:"¿Listo para operar Cisco Meraki sin riesgos innecesarios?",description:"Empezá a proteger tus configuraciones, detectar cambios y volver atrás en segundos con Selent.",button:"Iniciar Prueba Gratuita",features:{trial:"Prueba gratuita de 14 dÃas",noCard:"Sin tarjeta de crédito",instant:"Activación instantánea"}},footer:{description:"Gestión de redes empresariales, simplificada con IA",resources:"Recursos",company:"Empresa",contact:"Contacto",terms:"Términos de Servicio",privacy:"PolÃtica de Privacidad",rights:"© 2025 Selent. Todos los derechos reservados."},topology:{autoBackup:"Respaldo Auto",every6h:"Cada 6 horas",aiAnalysis:"Análisis IA",realtime:"Tiempo real",instantRestore:"Restauración Instantánea",oneClick:"Un clic"},signup:{pageTitle:"Iniciar Prueba Gratuita",backToSite:"Volver al sitio",steps:{email:{title:"Comencemos",subtitle:"Ingresa tu correo corporativo para comenzar tu prueba gratuita",label:"Correo de Trabajo",placeholder:"[email protected]",corporateNote:"Por favor usa tu correo corporativo"},contact:{title:"Cuéntanos sobre ti",subtitle:"Ayúdanos a personalizar tu experiencia",firstName:"Nombre",lastName:"Apellido",phone:"Teléfono",company:"Empresa"},painPoints:{title:"¿Qué desafÃos enfrentas?",subtitle:"Cuéntanos sobre los problemas en tus operaciones de red",label:"Describe tus desafÃos",placeholder:"ej., Respaldo y restauración de configuración, seguimiento de cambios, monitoreo de cumplimiento..."},otherTools:{title:"Herramientas actuales",subtitle:"¿Estás usando actualmente alguna herramienta de gestión de redes?"},demo:{title:"¿Te gustarÃa una demo?",subtitle:"Agenda una demo personalizada para ver cómo Selent puede ayudar a tu equipo"}},howDidYouHear:{title:"¿Cómo te enteraste de Selent?",options:{onlineSearch:"Búsqueda en Internet",socialMedia:"Redes Sociales",referral:"Referencia",advertisement:"Publicidad",event:"Evento o Conferencia",other:"Otro"}},errors:{emailRequired:"El correo es requerido",emailInvalid:"Por favor ingresa un correo válido",emailCorporate:"Por favor usa un correo corporativo",firstNameRequired:"El nombre es requerido",lastNameRequired:"El apellido es requerido",companyRequired:"El nombre de la empresa es requerido",painPointsRequired:"Por favor describe tus desafÃos",howDidYouHearRequired:"Por favor selecciona una opción",usesOtherToolsRequired:"Por favor selecciona una opción",wantsDemoRequired:"Por favor selecciona una opción"},common:{back:"Atrás",continue:"Continuar",submit:"Enviar",submitting:"Env
9683iando...",yes:"SÃ",no:"No"},success:{title:"¡Todo listo!",description:"Nuestro equipo revisará tu solicitud. A la brevedad te enviaremos el link para que inicies tu prueba.",emailSent:"Te contactaremos a {email} con instrucciones para acceder a tu prueba gratuita.",demoRedirect:"Redirigiendo para agendar tu demo...",backToHome:"Volver al inicio"},trustIndicators:{secure:"Tus datos están seguros y nunca serán compartidos con terceros"}},blogPage:{title:"Blog de Selent",subtitle:"Perspectivas y mejores prácticas para la gestión de redes",searchPlaceholder:"Buscar artÃculos...",allCategory:"Todos",noPosts:"Aún No Hay Publicaciones",noPostsDescription:"Estamos trabajando en crear contenido valioso para ti. ¡Vuelve pronto!",noResults:"No se encontraron artÃculos que coincidan con tus criterios.",backToBlog:"Volver al Blog",relatedArticles:"ArtÃculos Relacionados",readTime:"lectura",ctaReady:"¿LISTO PARA TRANSFORMAR?",ctaTitle:"Automatiza la Gestión de tu Red",ctaDescription:"Descubre cómo Selent puede ayudarte a automatizar la gestión de configuración de Cisco Meraki con inteligencia impulsada por IA y seguridad de nivel empresarial.",ctaButton:"Solicitar Demo",ctaSubtext:"Obtén insights personalizados para las necesidades especÃficas de tu organización"}},pt:{header:{blog:"Blog",login:"Entrar"},hero:{badge:"Parceiro Oficial Cisco Meraki Technology",title:"Proteja suas redes Cisco Meraki antes que seja tarde",subtitle:"",description:`Um erro ou uma alteração mal executada não deveria comprometer a sua operação. 9684 9685A Selent automatiza backups, audita alterações e permite restaurar configurações Cisco Meraki em segundos.`,ctaDemo:"Solicitar Demo",trustedBy:"Confiam em nós:"},stats:{automated:{value:"100%",title:"Automatizado",subtitle:"Backup de configuração"},deviceTypes:{value:"Todos",title:"Tipos de Dispositivos",subtitle:"MX, MS, MR, MV"},apiCoverage:{value:"API v1",title:"Cobertura Completa",subtitle:"Dashboard API"},uptime:{value:"99.9%",title:"SLA de Disponibilidade",subtitle:"Pronto para empresas"}},features:{badge:"Recursos Principais",title:"Você sabia que reverter alterações incorretas no Cisco Meraki pode ser lento sem ferramentas adicionais?",description:"Um erro ou uma alteração mal executada pode deixar você sem uma forma rápida de voltar atrás, comprometendo a continuidade do negócio. Por isso, a Selent oferece ferramentas projetadas especificamente para operar Cisco Meraki de forma segura e escalável.",backup:{title:"Backup de Configuração Cisco Meraki",description:"Backup automatizado para todos os seus dispositivos Cisco Meraki - Firewalls MX, switches MS, pontos de acesso MR e câmeras MV.",features:["Integração completa com Dashboard API","Snapshots de configuração de toda a rede","Backup de templates e polÃticas","Sincronização de configuração entre organizações"],badge:"Popular"},changeDetection:{title:"Detecção Inteligente de Mudanças",description:"A IA analisa as mudanças na sua configuração Cisco Meraki e explica o impacto em linguagem simples.",features:["Rastreamento de mudanças em VLAN e sub-redes","Análise de impacto de regras de firewall","Modificações de SSID sem fio","Alertas de configuração de portas"]},search:{title:"Busca em Linguagem Natural",description:"Pesquise em todas as suas configurações Cisco Meraki usando consultas em linguagem simples.",features:["Encontre dispositivos por IP ou MAC","Pesquise regras de firewall por porta","Localize VLANs e sub-redes","Consulte configurações sem fio"],badge:"Com IA"},compliance:{title:"Monitoramento de Conformidade Cisco Meraki",description:"Garanta que suas redes Cisco Meraki atendam aos padrões de segurança e polÃticas organizacionais.",features:["Verificações de conformidade PCI DSS","Auditoria de autenticação 802.1X","Validação de regras de firewall","Verificação de isolamento de rede de convidados"],badge:"Em Breve"}},howItWorks:{badge:"Como Funciona",title:"Conecte seu Dashboard Cisco Meraki",description:"Comece em minutos com sua chave API Cisco Meraki existente",step1:{title:"Conectar Dashboard Cisco Meraki",de
9685scription:"Adicione sua chave API Cisco Meraki e selecione organizações. Suportamos Dashboard APIs v0 e v1.",terminal:{connecting:"> Conectando ao Dashboard API...",orgsFound:"> Organizações: 5 encontradas",networksDiscovered:"> Redes: 47 descobertas",devices:"> Dispositivos: MX, MS, MR, MV â"}},step2:{title:"Selecionar Escopo de Backup",description:"Escolha quais redes Cisco Meraki e tipos de dispositivos fazer backup. Configure agendamentos por organização ou rede.",mxFirewalls:"Firewalls MX",msSwitches:"Switches MS",mrAccessPoints:"Pontos de Acesso MR",backupSchedule:"Agendamento de backup: A cada 6 horas"},step3:{title:"Gerenciar e Restaurar",description:"Rastreie mudanças de configuração Cisco Meraki, pesquise em todos os dispositivos e restaure qualquer estado anterior instantaneamente.",latestBackup:"Ãltimo Backup",dashboardSync:"â Sincronização Dashboard ativa",changeDetection:"â Detecção de mudanças ativada",webhookAlerts:"â Alertas webhook prontos"}},blog:{badge:"INSIGHTS",title:"Ãltimos Insights",description:"Estratégias de otimização de rede e melhores práticas",viewAll:"Ver todos os insights"},pricing:{badge:"Planos de Preços",title:"Preços Simples e Transparentes",description:"Escolha o plano que se adapta à s necessidades da sua organização.",essential:{name:"Essencial",price:"$1.80",period:"por dispositivo/mês",description:"Backup e restauração básicos",features:["Backup e restauração de configuração","Backups automáticos semanais","PerÃodo de retenção de 180 dias","Notificações por e-mail","Suporte padrão"],cta:"Iniciar Teste Gratuito"},enterprise:{name:"Empresarial",price:"Contatar",period:"Preços personalizados",description:"Recursos avançados e suporte",features:["Tudo do Essencial","Backups automáticos diários","PerÃodo de retenção de 360 dias","Busca semântica de logs com IA","Equipe de suporte dedicada","Tempos de resposta prioritários","Integrações personalizadas"],cta:"Contatar Vendas",badge:"RECOMENDADO"},addons:{title:"Complementos DisponÃveis",multiClient:{title:"Suporte Multi-Cliente",description:"Ideal para MSPs e provedores de serviços",features:["Gerencie múltiplas organizações cliente","Dados e acesso de clientes segregados","Opções de dashboard de marca branca"]},compliance:{title:"Agente de Conformidade IA",description:"Monitoramento de conformidade automatizado",features:["Verificação de conformidade em tempo real","Sugestões de remediação automatizadas","Relatórios e auditorias de conformidade"],badge:"Em Breve"}}},partners:{badge:"PARCERIAS OFICIAIS",title:"LÃderes da Indústria",poweredBy:"Desenvolvido por",description:"Integrações profundas com plataformas empresariais para fornecer inteligência de rede com IA sem interrupções",meraki:{title:"Parceiro Tecnológico Cisco Meraki",description:"Parceiro tecnológico oficial com integração API profunda e compatibilidade certificada"},selectDev:{title:"Desenvolvedor Select da Cisco",description:"Status de desenvolvedor elite com acesso avançado à plataforma e suporte prioritário"}},cta:{title:"Pronto para operar Cisco Meraki sem riscos desnecessários?",description:"Comece a proteger suas configurações, acompanhar alterações e reverter mudanças em segundos com a Selent.",button:"Iniciar Teste Gratuito",features:{trial:"Teste gratuito de 14 dias",noCard:"Sem cartão de crédito",instant:"Ativação instantânea"}},footer:{description:"Gerenciamento de redes empresariais, simplificado com IA",resources:"Recursos",company:"Empresa",contact:"Contato",terms:"Termos de Serviço",privacy:"PolÃtica de Privacidade",rights:"© 2025 Selent. Todos os direitos reservados."},topology:{autoBackup:"Backup Auto",every6h:"A cada 6 horas",aiAnalysis:"Análise IA",realtime:"Tempo real",instantRestore:"Restauração Instantânea",oneClick:"Um clique"},signup:{pageTitle:"Iniciar Teste Gratuito",backToSite:"Voltar ao site",steps:{email:{title:"Vamos começar",subtitle:"Digite seu e-mail corporativo para começar seu teste gratuito",label:"E-mail de Trabalho",placeholder:"[email protected]",corporateNote:"Por favor, use seu e-mail corporativo"},contact:{title:"Conte-nos sobre você",subtitle:"Ajude-nos a personalizar sua experiência",firstName:"Nome",lastName:"Sobrenome",phone:"Telefone",company:"Empresa"},painPoints:{title:"Quais desafios você enfrenta?",subtitle:"Conte-nos sobre os problemas nas suas operações de rede",label:"Descreva seus desafios",placeholder:"ex., Backup e restauração de configuração, rastreamento de mudanças, monitoramento de conformidade..."},otherTools:{title:"Ferramentas atuais",subtitle:"Você está usando atualmente alguma ferramenta de gerenciamento de rede?"},demo:{title:"Você gostaria de uma demo?",subtitle:"Agende uma demo personalizada para ver como a Selent pode ajudar sua equipe"}},howDidYouHear:{title:"Como você conheceu a Selent?",options:{onlineSearch:"Pesquisa Online",socialMedia:"Redes Sociais",referral:"Indicação",advertisement:"Publicidade",event:"Evento ou Conferência",other:"Outro"}},errors:{emailRequired:"O e-mail é obrigatório",emailInvalid:"Por favor, insira um e-mail válido",emailCorporate:"Por favor, use um e-mail corporativo",firstNameRequired:"O nome é obrigatório",lastNameRequired:"O sobrenome é obrigatório",companyRequired:"O nome da empresa é obrigatório",painPointsRequired:"Por favor, descreva seus desafios",howDidYouHearRequired:"Por favor, selecione uma opção",usesOtherToolsRequired:"Por favor, selecione uma opção",wantsDemoRequired:"Por favor, selecione uma opção"},common:{back:"Voltar",continue:"Continuar",submit:"Enviar",submitting:"Env
9685iando...",yes:"Sim",no:"Não"},success:{title:"Tudo pronto!",description:"Nossa equipe analisará sua solicitação. Em breve enviaremos o link para você iniciar seu teste.",emailSent:"Entraremos em contato pelo {email} com instruções para acessar seu teste gratuito.",demoRedirect:"Redirecionando para agendar sua demo...",backToHome:"Voltar à página inicial"},trustIndicators:{secure:"Seus dados estão seguros e nunca serão compartilhados com terceiros"}},blogPage:{title:"Blog Selent",subtitle:"Insights e melhores práticas para gerenciamento de rede",searchPlaceholder:"Pesquisar artigos...",allCategory:"Todos",noPosts:"Ainda Não Há Publicações",noPostsDescription:"Estamos trabalhando na criação de conteúdo valioso para você. Volte em breve!",noResults:"Nenhum artigo encontrado correspondente aos seus critérios.",backToBlog:"Voltar ao Blog",relatedArticles:"Artigos Relacionados",readTime:"leitura",ctaReady:"PRONTO PARA TRANSFORMAR?",ctaTitle:"Automatize o Gerenciamento da Sua Rede",ctaDescription:"Descubra como a Selent pode ajudá-lo a automatizar o gerenciamento de configuração do Cisco Meraki com inteligência impulsionada por IA e segurança de nÃvel empresarial.",ctaButton:"Solicitar Demo",ctaSubtext:"Obtenha insights personalizados para as necessidades especÃficas da sua organização"}}},w2=T.createContext(void 0),E5=({children:e})=>{const[t,n]=T.useState(()=>{const s=localStorage.getItem("selent-language");return s&&(s==="en"||s==="es"||s==="pt")?s:"en"}),a=s=>{n(s),localStorage.setItem("selent-language",s)};T.useEffect(()=>{document.documentElement.lang=t},[t]);const r={language:t,setLanguage:a,t:C5[t]};return i.jsx(w2.Provider,{value:r,children:e})},su=()=>{const e=T.useContext(w2);if(e===void 0)throw new Error("useLanguage must be used within a LanguageProvider");return e};function N5(){const{t:e,language:t}=su(),[n,a]=T.useState(e.blogPage.allCategory),[r,s]=T.useState(""),[o,l]=M1();T.useEffect(()=>{a(e.blogPage.allCategory)},[t,e.blogPage.allCategory]);const c=T.useMemo(()=>{const x=gc[t];return x&&x.length>0?x:gc.en},[t]),u=9,d=parseInt(o.get("page")||"1",10),m=T.useMemo(()=>{const x=new Set([e.blogPage.allCategory]);c.forEach(v=>{v.category&&x.add(v.category)});const b=Array.from(x);return[e.blogPage.allCategory,...b.filter(v=>v!==e.blogPage.allCategory).sort()]},[e.blogPage.allCategory,c]),p=T.useMemo(()=>c.filter(x=>{const b=n===e.blogPage.allCategory||x.category===n,v=r===""||x.title.toLowerCase().includes(r.toLowerCase())||x.excerpt.toLowerCase().includes(r.toLowerCase());return b&&v}),[n,r,e.blogPage.allCategory,c]),f=Math.ceil(p.length/u),g=T.useMemo(()=>{const x=(d-1)*u,b=x+u;return p.slice(x,b)},[p,d]),y=x=>{l({page:x.toString()}),window.scrollTo({top:0,behavior:"smooth"})},w={"@context":"https://schema.org","@type":"CollectionPage",name:"Selent Blog",description:"Insights, best practices, and updates from the world of network management.",url:"https://selent.ai/blog",publisher:{"@type":"Organization",name:"Selent",url:"https://selent.ai",logo:{"@type":"ImageObject",url:"https://selent.ai/logo_white.png"}}};return i.jsxs(i.Fragment,{children:[i.jsx(it,{title:"Selent Blog - Network Management Best Practices & Insights",description:"Explore insights, best practices, and updates from the world of network management. Learn about AI-powered automation, Cisco Meraki configuration, and enterprise network security.",keywords:"network management blog, cisco meraki best practices, network automation insights, AI network management articles, configuration management tips",url:"https://selent.ai/blog",type:"website",structuredData:w}),i.jsxs("div",{className:"w-full min-h-full font-sans text-white bg-dark-base custom-scrollbar noise-overlay",children:[i.jsx(fo,{}),i.jsxs("main",{className:"w-full",children:[i.jsxs("section",{className:"pt-8 pb-4 md:pt-12 md:pb-6 relative overflow-hidden",children:[i.jsx(pe,{opacity:.01}),i.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative z-10",children:[i.jsxs(M.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.6},className:"text-center mb-8",children:[i.jsx("h1",{className:"text-3xl md:text-4xl font-bold text-white mb-2",children:e.blogPage.title}),i.jsx("p",{className:"text-gray-400",children:e.blogPage.subtitle})]}),i.jsx(M.div,{initial:{opacity:0,y:20}
9685,animate:{opacity:1,y:0},transition:{duration:.6,delay:.1},className:"glass-card backdrop-blur-xl p-4 rounded-xl border border-dark-border/50",children:i.jsxs("div",{className:"flex flex-col lg:flex-row gap-4",children:[i.jsx("div",{className:"flex-1",children:i.jsxs("div",{className:"relative group",children:[i.jsx("div",{className:"absolute -inset-0.5 bg-gradient-to-r from-accent-cyan/20 to-accent-purple/20 rounded-lg blur opacity-0 group-hover:opacity-100 transition duration-300"}),i.jsxs("div",{className:"relative glass-card rounded-lg overflow-hidden",children:[i.jsx("input",{type:"text",placeholder:e.blogPage.searchPlaceholder,value:r,onChange:x=>{s(x.target.value),l({}),clearTimeout(window.searchTimeout),window.searchTimeout=setTimeout(()=>{x.target.value&&w5(x.target.value)},500)},className:"w-full py-2.5 px-4 pr-10 bg-transparent border-none focus:outline-none text-white placeholder-gray-500"}),i.jsx(at,{className:"absolute right-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-gray-400"})]})]})}),i.jsx("div",{className:"flex items-center gap-2 overflow-x-auto scrollbar-hide",children:m.map(x=>i.jsx(M.button,{whileHover:{scale:1.05},whileTap:{scale:.95},onClick:()=>{a(x),l({}),k5("category",x)},className:`px-4 py-2 rounded-lg text-sm whitespace-nowrap transition-all duration-200 ${x===n?"bg-accent-cyan text-dark-base font-medium":"glass-card text-gray-400 hover:text-white hover:border-accent-cyan/50"}`,children:x},x))})]})})]})]}),i.jsxs("section",{className:"pt-4 pb-8 md:pt-6 md:pb-12 relative",children:[i.jsx(pe,{opacity:.01}),i.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative z-10",children:[i.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:c.length===0?i.jsxs("div",{className:"col-span-full text-center py-20",children:[i.jsx("h3",{className:"text-2xl font-semibold text-white mb-4",children:e.blogPage.noPosts}),i.jsx("p",{className:"text-gray-400 mb-8",children:e.blogPage.noPostsDescription})]}):g.length>0?g.map((x,b)=>i.jsx(g2,{title:x.title,excerpt:x.excerpt,date:x.date,author:x.author,slug:x.slug,delay:b*.1},x.slug)):i.jsx(M.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.6},className:"col-span-full text-center py-12",children:i.jsxs("div",{className:"glass-card p-12 max-w-md mx-auto",children:[i.jsx(at,{className:"h-12 w-12 text-gray-600 mx-auto mb-4"}),i.jsx("p",{className:"text-gray-400",children:e.blogPage.noResults})]})})}),f>1&&c.length>0&&i.jsx(M.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.6,delay:.5},className:"mt-16 flex justify-center",children:i.jsxs("nav",{className:"inline-flex rounded-lg glass-card p-1",children:[i.jsx("button",{onClick:()=>{y(d-1),Ur(d-1,"previous")},disabled:d===1,className:`px-4 py-2 rounded-md text-sm font-medium transition-all duration-200 ${d===1?"text-gray-600 cursor-not-allowed":"text-gray-400 hover:text-white hover:bg-dark-card cursor-pointer"}`,children:i.jsx(fh,{className:"h-4 w-4"})}),(()=>{const x=[],b=d>3,v=d<f-2;x.push(i.jsx("button",{onClick:()=>{y(1),Ur(1,"page_number")},className:`px-4 py-2 rounded-md text-sm font-medium transition-all duration-200 ${d===1?"bg-accent-cyan text-dark-base":"text-gray-400 hover:text-white hover:bg-dark-card"}`,children:"1"},1)),b&&d>4&&x.push(i.jsx("span",{className:"px-2 text-gray-600",children:"..."},"ellipsis-start"));for(let N=Math.max(2,d-1);N<=Math.min(f-1,d+1);N++)N===1||N===f||x.push(i.jsx("button",{onClick:()=>{y(N),Ur(N,"page_number")},className:`px-4 py-2 rounded-md text-sm font-medium transition-all duration-200 ${d===N?"bg-accent-cyan text-dark-base":"text-gray-400 hover:text-white hover:bg-dark-card"}`,children:N},N));return v&&d<f-3&&x.push(i.jsx("span",{className:"px-2 text-gray-600",children:"..."},"ellipsis-end")),f>1&&x.push(i.jsx("button",{onClick:()=>{y(f),Ur(f,"page_number")},className:`px-4 py-2 rounded-md text-sm font-medium transition-all duration-200 ${d===f?"bg-accent-cyan text-dark-base":"text-gray-400 hover:text-white hover:bg-dark-card"}`,children:f},f)),x})(),i.jsx("button",{onClick:()=>{y(d+1),Ur(d+1,"next")},disabled:d===f,className:`px-4 py-2 rounded-md text-sm font-medium transition-all duration-200 ${d===f?"text-gray-600 cursor-not-allowed":"text-gray-400 hover:text-white hover:bg-dark-card cursor-pointer"}`,children:i.jsx(gh,{className:"h-4 w-4"})})]})})]})]})]}),i.jsx(go,{})]})]})}const T5=({title:e,date:t,author:n,authorImage:a,category:r,readTime:s})=>{const{t:o}=su();return i.jsxs(M.div,{initial:{opacity:0,y:20}
9685,animate:{opacity:1,y:0},transition:{duration:.6},className:"mb-12",children:[i.jsxs("div",{className:"inline-flex items-center px-4 py-2 rounded-full glass-card mb-6",children:[i.jsx("div",{className:"w-2 h-2 bg-accent-cyan rounded-full mr-2 animate-pulse"}),i.jsx("span",{className:"text-sm font-medium text-accent-cyan",children:r})]}),i.jsxs("div",{className:"relative mb-8",children:[i.jsx("h1",{className:"text-4xl md:text-5xl font-bold text-white leading-tight",children:e}),i.jsx("div",{className:"absolute -left-8 top-0 w-16 h-full opacity-20",children:i.jsxs("svg",{viewBox:"0 0 100 200",className:"w-full h-full",children:[i.jsx("path",{d:"M 50 20 Q 20 60, 50 100 T 50 180",stroke:"currentColor",strokeWidth:"3",fill:"none",className:"text-accent-cyan"}),i.jsx("circle",{cx:"50",cy:"20",r:"4",fill:"currentColor",className:"text-accent-cyan"}),i.jsx("circle",{cx:"50",cy:"100",r:"4",fill:"currentColor",className:"text-accent-purple"}),i.jsx("circle",{cx:"50",cy:"180",r:"4",fill:"currentColor",className:"text-accent-cyan"})]})})]}),i.jsxs("div",{className:"glass-card p-4 inline-flex items-center space-x-6",children:[i.jsxs("div",{className:"flex items-center",children:[i.jsxs("div",{className:"relative",children:[i.jsx("img",{src:a,alt:n,className:"h-10 w-10 rounded-full"}),i.jsx("div",{className:"absolute inset-0 rounded-full ring-2 ring-accent-cyan/30"})]}),i.jsxs("div",{className:"ml-3",children:[i.jsx("p",{className:"text-sm font-medium text-white",children:n}),i.jsx("p",{className:"text-xs text-gray-400",children:"Author"})]})]}),i.jsx("div",{className:"h-8 w-px bg-dark-border"}),i.jsxs("div",{className:"flex items-center text-sm text-gray-300",children:[i.jsx(qt,{className:"h-4 w-4 mr-2 text-accent-cyan"}),i.jsx("time",{dateTime:t,children:new Date(t).toLocaleDateString("en-US",{year:"numeric",month:"long",day:"numeric"})})]}),i.jsxs("div",{className:"flex items-center text-sm text-gray-300",children:[i.jsx(za,{className:"h-4 w-4 mr-2 text-accent-purple"}),i.jsxs("span",{children:[s," ",o.blogPage.readTime]})]})]})]})};function S5({text:e,className:t=""}){const[n,a]=T.useState(!1),r=async()=>{try{await navigator.clipboard.writeText(e),a(!0),setTimeout(()=>a(!1),2e3)}catch(s){console.error("Failed to copy text:",s)}};return i.jsx(M.button,{onClick:r,className:`inline-flex items-center gap-2 px-3 py-1.5 rounded-lg glass-card border border-dark-border hover:border-accent-cyan/50 transition-all duration-200 group ${t}`,whileHover:{scale:1.05},whileTap:{scale:.95},children:i.jsx(po,{mode:"wait",children:n?i.jsxs(M.div,{initial:{opacity:0}
vendor: 4,199 bytes, line 9685
9685,animate:{opacity:1},exit:{opacity:0},transition:{duration:.15},className:"flex items-center gap-2",children:[i.jsx(ze,{className:"h-4 w-4 text-green-400"}),i.jsx("span",{className:"text-xs font-medium text-green-400",children:"Copied!"})]},"check"):i.jsxs(M.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.15},className:"flex items-center gap-2",children:[i.jsx(tT,{className:"h-4 w-4 text-gray-400 group-hover:text-accent-cyan transition-colors"}),i.jsx("span",{className:"text-xs font-medium text-gray-400 group-hover:text-accent-cyan transition-colors",children:"Copy"})]},"copy")})})}function gx(e){const t=[],n=String(e||"");let a=n.indexOf(","),r=0,s=!1;for(;!s;){a===-1&&(a=n.length,s=!0);const o=n.slice(r,a).trim();(o||!s)&&t.push(o),r=a+1,a=n.indexOf(",",r)}return t}function k2(e,t){const n={};return(e[e.length-1]===""?[...e,""]:e).join((n.padRight?" ":"")+","+(n.padLeft===!1?"":" ")).trim()}const I5=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,j5=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,P5={};function xx(e,t){return(P5.jsx?j5:I5).test(e)}const M5=/[ \t\n\f\r]/g;function D5(e){return typeof e=="object"?e.type==="text"?yx(e.value):!1:yx(e)}function yx(e){return e.replace(M5,"")===""}class xo{constructor(t,n,a){this.normal=n,this.property=t,a&&(this.space=a)}}xo.prototype.normal={};xo.prototype.property={};xo.prototype.space=void 0;function A2(e,t){const n={},a={};for(const r of e)Object.assign(n,r.property),Object.assign(a,r.normal);return new xo(n,a,t)}function Ks(e){return e.toLowerCase()}class jt{constructor(t,n){this.attribute=n,this.property=t}}jt.prototype.attribute="";jt.prototype.booleanish=!1;jt.prototype.boolean=!1;jt.prototype.commaOrSpaceSeparated=!1;jt.prototype.commaSeparated=!1;jt.prototype.defined=!1;jt.prototype.mustUseProperty=!1;jt.prototype.number=!1;jt.prototype.overloadedBoolean=!1;jt.prototype.property="";jt.prototype.spaceSeparated=!1;jt.prototype.space=void 0;let R5=0;const re=wi(),Fe=wi(),np=wi(),Q=wi(),ve=wi(),li=wi(),Mt=wi();function wi(){return 2**++R5}const ap=Object.freeze(Object.defineProperty({__proto__:null,boolean:re,booleanish:Fe,commaOrSpaceSeparated:Mt,commaSeparated:li,number:Q,overloadedBoolean:np,spaceSeparated:ve},Symbol.toStringTag,{value:"Module"})),md=Object.keys(ap);class Zh extends jt{constructor(t,n,a,r){let s=-1;if(super(t,n),bx(this,"space",r),typeof a=="number")for(;++s<md.length;){const o=md[s];bx(this,md[s],(a&ap[o])===ap[o])}}}Zh.prototype.defined=!0;function bx(e,t,n){n&&(e[t]=n)}function Er(e){const t={},n={};for(const[a,r]of Object.entries(e.properties)){const s=new Zh(a,e.transform(e.attributes||{},a),r,e.space);e.mustUseProperty&&e.mustUseProperty.includes(a)&&(s.mustUseProperty=!0),t[a]=s,n[Ks(a)]=a,n[Ks(s.attribute)]=a}return new xo(t,n,e.space)}const C2=Er({properties:{ariaActiveDescendant:null,ariaAtomic:Fe,ariaAutoComplete:null,ariaBusy:Fe,ariaChecked:Fe,ariaColCount:Q,ariaColIndex:Q,ariaColSpan:Q,ariaControls:ve,ariaCurrent:null,ariaDescribedBy:ve,ariaDetails:null,ariaDisabled:Fe,ariaDropEffect:ve,ariaErrorMessage:null,ariaExpanded:Fe,ariaFlowTo:ve,ariaGrabbed:Fe,ariaHasPopup:null,ariaHidden:Fe,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:ve,ariaLevel:Q,ariaLive:null,ariaModal:Fe,ariaMultiLine:Fe,ariaMultiSelectable:Fe,ariaOrientation:null,ariaOwns:ve,ariaPlaceholder:null,ariaPosInSet:Q,ariaPressed:Fe,ariaReadOnly:Fe,ariaRelevant:null,ariaRequired:Fe,ariaRoleDescription:ve,ariaRowCount:Q,ariaRowIndex:Q,ariaRowSpan:Q,ariaSelected:Fe,ariaSetSize:Q,ariaSort:null,ariaValueMax:Q,ariaValueMin:Q,ariaValueNow:Q,ariaValueText:null,role:null},transform(e,t){return t==="role"?t:"aria-"+t.slice(4).toLowerCase()}});function E2(e,t){return t in e?e[t]:t}function N2(e,t){return E2(e,t.toLowerCase())}const O5=Er({attributes:{acceptcharset:"accept-charset",classname:"class",htmlfor:"for",httpequiv:"http-equiv"},mustUseProperty:["checked","multiple","muted","selected"],properties:{abbr:null,accept:li,acceptCharset:ve,accessKey:ve,action:null,allow:null,allowFullScreen:re,allowPaymentRequest:re,allowUserMedia:re,alpha:re,alt:null,as:null,async:re,autoCapitalize:null,autoComplete:ve,autoF
9685ocus:re,autoPlay:re,blocking:ve,capture:null,charSet:null,checked:re,cite:null,className:ve,closedBy:null,colorSpace:null,cols:Q,colSpan:Q,command:null,commandFor:null,content:null,contentEditable:Fe,controls:re,controlsList:ve,coords:Q|li,crossOrigin:null,data:null,dateTime:null,decoding:null,default:re,defer:re,dir:null,dirName:null,disabled:re,download:np,draggable:Fe,encType:null,enterKeyHint:null,fetchPriority:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:re,formTarget:null,headers:ve,height:Q,hidden:np,high:Q,href:null,hrefLang:null,htmlFor:ve,httpEquiv:ve,id:null,imageSizes:null,imageSrcSet:null,inert:re,inputMode:null,integrity:null,is:null,isMap:re,itemId:null,itemProp:ve,itemRef:ve,itemScope:re,itemType:ve,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:re,low:Q,manifest:null,max:null,maxLength:Q,media:null,method:null,min:null,minLength:Q,multiple:re,muted:re,name:null,nonce:null,noModule:re,noValidate:re,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforeMatch:null,onBeforePrint:null,onBeforeToggle:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextLost:null,onContextMenu:null,onContextRestored:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onScrollEnd:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:re,optimum:Q,pattern:null,ping:ve,placeholder:null,playsInline:re,popover:null,popoverTarget:null,popoverTargetAction:null,poster:null,preload:null,readOnly:re,referrerPolicy:null,rel:ve,required:re,reversed:re,rows:Q,rowSpan:Q,sandbox:ve,scope:null,scoped:re,seamless:re,selected:re,shadowRootClonable:re,shadowRootCustomElementRegistry:re,shadowRootDelegatesFocus:re,shadowRootMode:null,shadowRootSerializable:re,shape:null,size:Q,sizes:null,slot:null,span:Q,spellCheck:Fe,src:null,srcDoc:null,srcLang:null,srcSet:null,start:Q,step:null,style:null,tabIndex:Q,target:null,title:null,translate:null,type:null,typeMustMatch:re,useMap:null,value:Fe,width:Q,wrap:null,writingSuggestions:null,align:null,aLink:null,archive:ve,axis:null,background:null,bgColor:null,border:Q,borderColor:null,bottomMargin:Q,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:re,declare:re,event:null,face:null,frame:null,frameBorder:null,hSpace:Q,leftMargin:Q,link:null,longDesc:null,lowSrc:null,marginHeight:Q,marginWidth:Q,noResize:re,noHref:re,noShade:re,noWrap:re,object:null,profile:null,prompt:null,rev:null,rightMargin:Q,rules:null,scheme:null,scrolling:Fe,standby:null,summary:null,text:null,topMargin:Q,valueType:null,version:null,vAlign:null,vLink:null,vSpace:Q,allowTransparency:null,autoCorrect:null,autoSave:null,credentialless:re,disablePictureInPicture:re,disableRemotePlayback:re,exportParts:li,part:ve,prefix:null,property:null,results:Q,security:null,unselectable:null},space:"html",transform:N2}),_5=Er({attributes:{accentHeight:"accent-height",alignmentBaseline:"alignment-baseline",arabicForm:"arabic-form",baselineShift:"baseline-shift",capHeight:"cap-height",className:"class",clipPath:"clip-path",clipRule:"clip-rule",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters",colorProfile:"color-profile",colorRen
9685dering:"color-rendering",crossOrigin:"crossorigin",dataType:"datatype",dominantBaseline:"dominant-baseline",enableBackground:"enable-background",fillOpacity:"fill-opacity",fillRule:"fill-rule",floodColor:"flood-color",floodOpacity:"flood-opacity",fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",hrefLang:"hreflang",horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",horizOriginY:"horiz-origin-y",imageRendering:"image-rendering",letterSpacing:"letter-spacing",lightingColor:"lighting-color",markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",maskType:"mask-type",navDown:"nav-down",navDownLeft:"nav-down-left",navDownRight:"nav-down-right",navLeft:"nav-left",navNext:"nav-next",navPrev:"nav-prev",navRight:"nav-right",navUp:"nav-up",navUpLeft:"nav
9685-up-left",navUpRight:"nav-up-right",onAbort:"onabort",onActivate:"onactivate",onAfterPrint:"onafterprint",onBeforePrint:"onbeforeprint",onBegin:"onbegin",onCancel:"oncancel",onCanPlay:"oncanplay",onCanPlayThrough:"oncanplaythrough",onChange:"onchange",onClick:"onclick",onClose:"onclose",onCopy:"oncopy",onCueChange:"oncuechange",onCut:"oncut",onDblClick:"ondblclick",onDrag:"ondrag",onDragEnd:"ondragend",onDragEnter:"ondragenter",onDragExit:"ondragexit",onDragLeave:"ondragleave",onDragOver:"ondragover",onDragStart:"ondragstart",onDrop:"ondrop",onDurationChange:"ondurationchange",onEmptied:"onemptied",onEnd:"onend",onEnded:"onended",onError:"onerror",onFocus:"onfocus",onFocusIn:"onfocusin",onFocusOut:"onfocusout",onHashChange:"onhashchange",onInput:"oninput",onInvalid:"oninvalid",onKeyDown:"onkeydown",onKeyPress:"onkeypress",onKeyUp:"onkeyup",onLoad:"onload",onLoadedData:"onloadeddata",onLoadedMetadata:"onloadedmetadata",onLoadStart:"onloadstart",onMessage:"onmessage",onMouseDown:"onmousedown",onMouseEnter:"onmouseenter",onMouseLeave:"onmouseleave",onMouseMove:"onmousemove",onMouseOut:"onmouseout",onMouseOver:"onmouseover",onMouseUp:"onmouseup",onMouseWheel:"onmousewheel",onOffline:"onoffline",onOnline:"ononline",onPageHide:"onpagehide",onPageShow:"onpageshow",onPaste:"onpaste",onPause:"onpause",onPlay:"onplay",onPlaying:"onplaying",onPopState:"onpopstate",onProgress:"onprogress",onRateChange:"onratechange",onRepeat:"onrepeat",onReset:"onreset",onResize:"onresize",onScroll:"onscroll",onSeeked:"onseeked",onSeeking:"onseeking",onSelect:"onselect",onShow:"onshow",onStalled:"onstalled",onStorage:"onstorage",onSubmit:"onsubmit",onSuspend:"onsuspend",onTimeUpdate:"ontimeupdate",onToggle:"ontoggle",onUnload:"onunload",onVolumeChange:"onvolumechange",onWaiting:"onwaiting",onZoom:"onzoom",overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pointerEvents:"pointer-events",referrerPolicy:"referrerpolicy",renderingIntent:"rendering-intent",shapeRendering:"shape-rendering",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",strokeDashArray:"stroke-dasharray",strokeDashOffset:"stroke-dashoffset",strokeLineCap:"stroke-linecap",strokeLineJoin:"stroke-linejoin",strokeMiterLimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",tabIndex:"tabindex",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",transformOrigin:"transform-origin",typeOf:"typeof",underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",vectorEffect:"vector-effect",vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",wordSpacing:"word-spacing",writingMode:"writing-mode",xHeight:"x-height",playbackOrder:"playbackorder",timelineBegin:"timelinebegin"},properties:{about:Mt,accentHeight:Q,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:Q,amplitude:Q,arabicForm:null,ascent:Q,attributeName:null,attributeType:null,azimuth:Q,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:Q,by:null,calcMode:null,capHeight:Q,className:ve,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:Q,diffuseConstant:Q,direction:null,display:null,dur:null,divisor:Q,dominantBaseline:null,download:re,dx:null,dy:null,edgeMode:null,editable:null,elevation:Q,enableBackground:null,end:null,event:null,exponent:Q,externalResourcesRequired:null,fill:null,fillOpacity:Q,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:li,g2:li,glyphName:li,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:Q,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:Q,horizOriginX:Q,horizOriginY:Q,id:null,ideographic:Q,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:Q,k:Q,k1:Q,k2:Q,k3:Q,k4:Q,kernelMatrix:Mt,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:Q,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskType:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:Q,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,on
vendor: 5,356 bytes, lines 9685-9686
9685Zoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:Q,overlineThickness:Q,paintOrder:null,panose1:null,path:null,pathLength:Q,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:ve,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:Q,pointsAtY:Q,pointsAtZ:Q,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:Mt,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:Mt,rev:Mt,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:Mt,requiredFeatures:Mt,requiredFonts:Mt,requiredFormats:Mt,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:Q,specularExponent:Q,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:Q,strikethroughThickness:Q,string:null,stroke:null,strokeDashArray:Mt,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:Q,strokeOpacity:Q,strokeWidth:null,style:null,surfaceScale:Q,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:Mt,tabIndex:Q,tableValues:null,target:null,targetX:Q,targetY:Q,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:Mt,to:null,transform:null,transformOrigin:null,u1:null,u2:null,underlinePosition:Q,underlineThickness:Q,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:Q,values:null,vAlphabetic:Q,vMathematical:Q,vectorEffect:null,vHanging:Q,vIdeographic:Q,version:null,vertAdvY:Q,vertOriginX:Q,vertOriginY:Q,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:Q,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null},space:"svg",transform:E2}),T2=Er({properties:{xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null,xLinkShow:null,xLinkTitle:null,xLinkType:null},space:"xlink",transform(e,t){return"xlink:"+t.slice(5).toLowerCase()}}),S2=Er({attributes:{xmlnsxlink:"xmlns:xlink"},properties:{xmlnsXLink:null,xmlns:null},space:"xmlns",transform:N2}),I2=Er({properties:{xmlBase:null,xmlLang:null,xmlSpace:null},space:"xml",transform(e,t){return"xml:"+t.slice(3).toLowerCase()}}),L5={classId:"classID",dataType:"datatype",itemId:"itemID",strokeDashArray:"strokeDasharray",strokeDashOffset:"strokeDashoffset",strokeLineCap:"strokeLinecap",strokeLineJoin:"strokeLinejoin",strokeMiterLimit:"strokeMiterlimit",typeOf:"typeof",xLinkActuate:"xlinkActuate",xLinkArcRole:"xlinkArcrole",xLinkHref:"xlinkHref",xLinkRole:"xlinkRole",xLinkShow:"xlinkShow",xLinkTitle:"xlinkTitle",xLinkType:"xlinkType",xmlnsXLink:"xmlnsXlink"},z5=/[A-Z]/g,vx=/-[a-z]/g,q5=/^data[-\w.:]+$/i;function ou(e,t){const n=Ks(t);let a=t,r=jt;if(n in e.normal)return e.property[e.normal[n]];if(n.length>4&&n.slice(0,4)==="data"&&q5.test(t)){if(t.charAt(4)==="-"){const s=t.slice(5).replace(vx,F5);a="data"+s.charAt(0).toUpperCase()+s.slice(1)}else{const s=t.slice(4);if(!vx.test(s)){let o=s.replace(z5,B5);o.charAt(0)!=="-"&&(o="-"+o),t="data"+o}}r=Zh}return new r(a,t)}function B5(e){return"-"+e.toLowerCase()}function F5(e){return e.charAt(1).toUpperCase()}const yo=A2([C2,O5,T2,S2,I2],"html"),Fa=A2([C2,_5,T2,S2,I2],"svg");function wx(e){const t=String(e||"").trim();return t?t.split(/[ \t\n\r\f]+/g):[]}function j2(e){return e.join(" ").trim()}var Jh={},kx=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,H5=/\n/g,U5=/^\s*/,V5=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,W5=/^:\s*/,$5=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,Y5=/^[;\s]*/,G5=/^\s+|\s+$/g,Q5=` 9686`,Ax="/",Cx="*",Ka="",K5="comment",X5="declaration";function Z5(e,t){if(typeof e!="string")throw new TypeError("First argument must be a string");if(!e)return[];t=t||{};var n=1,a=1;function r(g){var y=g.match(H5);y&&(n+=y.length);var w=g.lastIndexOf(Q5);a=~w?g.length-w:a+g.length}function s(){var g={line:n,column:a};return function(y){return y.position=new o(g),u(),y}}function o(g){this.start=g,this.end={line:n,column:a},this.source=t.source}o.prototype.content=e;function l(g){var y=new Error(t.source+":"+n+":"+a+": "+g);if(y.reason=g,y.filename=t.source,y.line=n,y.column=a,y.source=e,!t.silent)throw y}function c(g){var y=g.exec(e);if(y){var w=y[0];return r(w),e=e.slice(w.length),y}}function u(){c(U5)}function d(g){var y;for(g=g||[];y=m();)y!==!1&&g.push(y);return g}function m(){var g=s();if(!(Ax!=e.charAt(0)||Cx!=e.charAt(1))){for(var y=2;Ka!=e.charAt(y)&&(Cx!=e.charAt(y)||Ax!=e.charAt(y+1));)++y;if(y+=2,Ka===e.charAt(y-1))return l("End of comment missing");var w=e.slice(2,y-2);return a+=2,r(w),e=e.slice(y),a+=2,g({type:K5,comment:w})}}function p(){var g=s(),y=c(V5);if(y){if(m(),!c(W5))return l("property missing ':'");var w=c($5),x=g({type:X5,property:Ex(y[0].replace(kx,Ka)),value:w?Ex(w[0].replace(kx,Ka)):Ka});return c(Y5),x}}function f(){var g=[];d(g);for(var y;y=p();)y!==!1&&(g.push(y),d(g));return g}return u(),f()}function Ex(e){return e?e.replace(G5,Ka):Ka}var J5=Z5,eP=Dl&&Dl.__importDefault||function(e){return e&&e.__esMo
vendor: 3,641 bytes, line 9686
9686dule?e:{default:e}};Object.defineProperty(Jh,"__esModule",{value:!0});Jh.default=nP;const tP=eP(J5);function nP(e,t){let n=null;if(!e||typeof e!="string")return n;const a=(0,tP.default)(e),r=typeof t=="function";return a.forEach(s=>{if(s.type!=="declaration")return;const{property:o,value:l}=s;r?t(o,l,s):l&&(n=n||{},n[o]=l)}),n}var lu={};Object.defineProperty(lu,"__esModule",{value:!0});lu.camelCase=void 0;var aP=/^--[a-zA-Z0-9_-]+$/,iP=/-([a-z])/g,rP=/^[^-]+$/,sP=/^-(webkit|moz|ms|o|khtml)-/,oP=/^-(ms)-/,lP=function(e){return!e||rP.test(e)||aP.test(e)},cP=function(e,t){return t.toUpperCase()},Nx=function(e,t){return"".concat(t,"-")},uP=function(e,t){return t===void 0&&(t={}),lP(e)?e:(e=e.toLowerCase(),t.reactCompat?e=e.replace(oP,Nx):e=e.replace(sP,Nx),e.replace(iP,cP))};lu.camelCase=uP;var dP=Dl&&Dl.__importDefault||function(e){return e&&e.__esModule?e:{default:e}},mP=dP(Jh),pP=lu;function ip(e,t){var n={};return!e||typeof e!="string"||(0,mP.default)(e,function(a,r){a&&r&&(n[(0,pP.camelCase)(a,t)]=r)}),n}ip.default=ip;var hP=ip;const fP=yi(hP),cu=P2("end"),Rn=P2("start");function P2(e){return t;function t(n){const a=n&&n.position&&n.position[e]||{};if(typeof a.line=="number"&&a.line>0&&typeof a.column=="number"&&a.column>0)return{line:a.line,column:a.column,offset:typeof a.offset=="number"&&a.offset>-1?a.offset:void 0}}}function gP(e){const t=Rn(e),n=cu(e);if(t&&n)return{start:t,end:n}}function xs(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?Tx(e.position):"start"in e||"end"in e?Tx(e):"line"in e||"column"in e?rp(e):""}function rp(e){return Sx(e&&e.line)+":"+Sx(e&&e.column)}function Tx(e){return rp(e&&e.start)+"-"+rp(e&&e.end)}function Sx(e){return e&&typeof e=="number"?e:1}class dt extends Error{constructor(t,n,a){super(),typeof n=="string"&&(a=n,n=void 0);let r="",s={},o=!1;if(n&&("line"in n&&"column"in n?s={place:n}:"start"in n&&"end"in n?s={place:n}:"type"in n?s={ancestors:[n],place:n.position}:s={...n}),typeof t=="string"?r=t:!s.cause&&t&&(o=!0,r=t.message,s.cause=t),!s.ruleId&&!s.source&&typeof a=="string"){const c=a.indexOf(":");c===-1?s.ruleId=a:(s.source=a.slice(0,c),s.ruleId=a.slice(c+1))}if(!s.place&&s.ancestors&&s.ancestors){const c=s.ancestors[s.ancestors.length-1];c&&(s.place=c.position)}const l=s.place&&"start"in s.place?s.place.start:s.place;this.ancestors=s.ancestors||void 0,this.cause=s.cause||void 0,this.column=l?l.column:void 0,this.fatal=void 0,this.file="",this.message=r,this.line=l?l.line:void 0,this.name=xs(s.place)||"1:1",this.place=s.place||void 0,this.reason=this.message,this.ruleId=s.ruleId||void 0,this.source=s.source||void 0,this.stack=o&&s.cause&&typeof s.cause.stack=="string"?s.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}dt.prototype.file="";dt.prototype.name="";dt.prototype.reason="";dt.prototype.message="";dt.prototype.stack="";dt.prototype.column=void 0;dt.prototype.line=void 0;dt.prototype.ancestors=void 0;dt.prototype.cause=void 0;dt.prototype.fatal=void 0;dt.prototype.place=void 0;dt.prototype.ruleId=void 0;dt.prototype.source=void 0;const ef={}.hasOwnProperty,xP=new Map,yP=/[A-Z]/g,bP=new Set(["table","tbody","thead","tfoot","tr"]),vP=new Set(["td","th"]),M2="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function wP(e,t){if(!t||t.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const n=t.filePath||void 0;let a;if(t.development){if(typeof t.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");a=IP(n,t.jsxDEV)}else{if(typeof t.jsx!="function")throw new TypeError("Expected `jsx` in production options");
vendor: 6,016 bytes, line 9686
9686if(typeof t.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");a=SP(n,t.jsx,t.jsxs)}const r={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:a,elementAttributeNameCase:t.elementAttributeNameCase||"react",evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:n,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:t.passKeys!==!1,passNode:t.passNode||!1,schema:t.space==="svg"?Fa:yo,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:t.tableCellAlignToStyle!==!1},s=D2(r,e,void 0);return s&&typeof s!="string"?s:r.create(e,r.Fragment,{children:s||void 0},void 0)}function D2(e,t,n){if(t.type==="element")return kP(e,t,n);if(t.type==="mdxFlowExpression"||t.type==="mdxTextExpression")return AP(e,t);if(t.type==="mdxJsxFlowElement"||t.type==="mdxJsxTextElement")return EP(e,t,n);if(t.type==="mdxjsEsm")return CP(e,t);if(t.type==="root")return NP(e,t,n);if(t.type==="text")return TP(e,t)}function kP(e,t,n){const a=e.schema;let r=a;t.tagName.toLowerCase()==="svg"&&a.space==="html"&&(r=Fa,e.schema=r),e.ancestors.push(t);const s=O2(e,t.tagName,!1),o=jP(e,t);let l=nf(e,t);return bP.has(t.tagName)&&(l=l.filter(function(c){return typeof c=="string"?!D5(c):!0})),R2(e,o,s,t),tf(o,l),e.ancestors.pop(),e.schema=a,e.create(t,s,o,n)}function AP(e,t){if(t.data&&t.data.estree&&e.evaluater){const a=t.data.estree.body[0];return a.type,e.evaluater.evaluateExpression(a.expression)}Xs(e,t.position)}function CP(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);Xs(e,t.position)}function EP(e,t,n){const a=e.schema;let r=a;t.name==="svg"&&a.space==="html"&&(r=Fa,e.schema=r),e.ancestors.push(t);const s=t.name===null?e.Fragment:O2(e,t.name,!0),o=PP(e,t),l=nf(e,t);return R2(e,o,s,t),tf(o,l),e.ancestors.pop(),e.schema=a,e.create(t,s,o,n)}function NP(e,t,n){const a={};return tf(a,nf(e,t)),e.create(t,e.Fragment,a,n)}function TP(e,t){return t.value}function R2(e,t,n,a){typeof n!="string"&&n!==e.Fragment&&e.passNode&&(t.node=a)}function tf(e,t){if(t.length>0){const n=t.length>1?t:t[0];n&&(e.children=n)}}function SP(e,t,n){return a;function a(r,s,o,l){const u=Array.isArray(o.children)?n:t;return l?u(s,o,l):u(s,o)}}function IP(e,t){return n;function n(a,r,s,o){const l=Array.isArray(s.children),c=Rn(a);return t(r,s,o,l,{columnNumber:c?c.column-1:void 0,fileName:e,lineNumber:c?c.line:void 0},void 0)}}function jP(e,t){const n={};let a,r;for(r in t.properties)if(r!=="children"&&ef.call(t.properties,r)){const s=MP(e,r,t.properties[r]);if(s){const[o,l]=s;e.tableCellAlignToStyle&&o==="align"&&typeof l=="string"&&vP.has(t.tagName)?a=l:n[o]=l}}if(a){const s=n.style||(n.style={});s[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=a}return n}function PP(e,t){const n={};for(const a of t.attributes)if(a.type==="mdxJsxExpressionAttribute")if(a.data&&a.data.estree&&e.evaluater){const s=a.data.estree.body[0];s.type;const o=s.expression;o.type;const l=o.properties[0];l.type,Object.assign(n,e.evaluater.evaluateExpression(l.argument))}else Xs(e,t.position);else{const r=a.name;let s;if(a.value&&typeof a.value=="object")if(a.value.data&&a.value.data.estree&&e.evaluater){const l=a.value.data.estree.body[0];l.type,s=e.evaluater.evaluateExpression(l.expression)}else Xs(e,t.position);else s=a.value===null?!0:a.value;n[r]=s}return n}function nf(e,t){const n=[];let a=-1;const r=e.passKeys?new Map:xP;for(;++a<t.children.length;){const s=t.children[a];let o;if(e.passKeys){const c=s.type==="element"?s.tagName:s.type==="mdxJsxFlowElement"||s.type==="mdxJsxTextElement"?s.name:void 0;if(c){const u=r.get(c)||0;o=c+"-"+u,r.set(c,u+1)}}const l=D2(e,s,o);l!==void 0&&n.push(l)}return n}function MP(e,t,n){const a=ou(e.schema,t);if(!(n==null||typeof n=="number"&&Number.isNaN(n))){if(Array.isArray(n)&&(n=a.commaSeparated?k2(n):j2(n)),a.property==="style"){let r=typeof n=="object"?n:DP(e,String(n));return e.stylePropertyNameCase==="css"&&(r=RP(r)),["style",r]}return[e.elementAttributeNameCase==="react"&&a.space?L5[a.property]||a.property:a.attribute,n]}}function DP(e,t){try{return fP(t,{reactCompat:!0})}catch(n){if(e.ignoreInvalidStyle)return{};const a=n,r=new dt("Cannot parse `style` attribute",{ancestors:e.ancestors,cause:a,ruleId:"style",source:"hast-util-to-jsx-runtime"});throw r.file=e.filePath||void 0,r.url=M2+"#cannot-parse-style-attribute",r}}function O2(e,t,n){let a;if(!n)a={type:"Literal",value:t};else if(t.includes(".")){const r=t.split(".");let s=-1,o;for(;++s<r.length;){const l=xx(r[s])?{type:"Identifier",name:r[s]}:{type:"Literal",value:r[s]};o=o?{type:"MemberExpression",object:o,property:l,computed:!!(s&&l.type==="Literal"),optional:!1}:l}a=o}else a=xx(t)&&!/^[a-z]/.test(t)?{type:"Identifier",name:t}:{type:"Literal",value:t};if(a.type==="Literal"){const r=a.value;return ef.call(e.components,r)?e.components[r]:r}if(e.evaluater)return e.evaluater.evaluateExpression(a);Xs(e)}function Xs(e,t){const n=new dt("Cannot handle MDX estrees without `createEvaluater`",{ancestors:e.ancestors,place:t,ruleId:"mdx-estree",source:"hast-util-to-jsx-runtime"});throw n.file=e.filePath||void 0,n.url=M2+"#cannot-handle-mdx-estrees-without-createevaluater",n}function RP(e){const t={};let n;for(n in e)ef.call(e,n)&&(t[OP(n)]=e[n]);return t}function OP(e){let t=e.replace(yP,_P);return t.slice(0,3)==="ms-"&&(t="-"+t),t}function _P(e){return"-"+e.toLowerCase()}const pd={action:["form"],cite:["blockquote","del","ins","q"],data:["object"],formAction:["button","input"],href:["a","area","base","link"],icon:["menuitem"],itemId:null,manifest:["html"],ping:["a","area"],poster:["video"],src:["audio","embed","iframe","img","input","script","source","track","video"]},LP={};function af(e,t){const n=LP,a=typeof n.includeImageAlt=="boolean"?n.includeImageAlt:!0,r=typeof n.includeHtml=="boolean"?n.includeHtml:!0;return _2(e,a,r)}function _2(e,t,n){if(zP(e)){if("value"in e)return e.type==="html"&&!n?"":e.value;if(t&&"alt"in e&&e.alt)return e.alt;if("children"in e)return Ix(e.children,t,n)}
vendor: 14,728 bytes, line 9686
9686return Array.isArray(e)?Ix(e,t,n):""}function Ix(e,t,n){const a=[];let r=-1;for(;++r<e.length;)a[r]=_2(e[r],t,n);return a.join("")}function zP(e){return!!(e&&typeof e=="object")}const jx=document.createElement("i");function rf(e){const t="&"+e+";";jx.innerHTML=t;const n=jx.textContent;return n.charCodeAt(n.length-1)===59&&e!=="semi"||n===t?!1:n}function Lt(e,t,n,a){const r=e.length;let s=0,o;if(t<0?t=-t>r?0:r+t:t=t>r?r:t,n=n>0?n:0,a.length<1e4)o=Array.from(a),o.unshift(t,n),e.splice(...o);else for(n&&e.splice(t,n);s<a.length;)o=a.slice(s,s+1e4),o.unshift(t,0),e.splice(...o),s+=1e4,t+=1e4}function Wt(e,t){return e.length>0?(Lt(e,e.length,0,t),e):t}const Px={}.hasOwnProperty;function L2(e){const t={};let n=-1;for(;++n<e.length;)qP(t,e[n]);return t}function qP(e,t){let n;for(n in t){const r=(Px.call(e,n)?e[n]:void 0)||(e[n]={}),s=t[n];let o;if(s)for(o in s){Px.call(r,o)||(r[o]=[]);const l=s[o];BP(r[o],Array.isArray(l)?l:l?[l]:[])}}}function BP(e,t){let n=-1;const a=[];for(;++n<t.length;)(t[n].add==="after"?e:a).push(t[n]);Lt(e,0,0,a)}function z2(e,t){const n=Number.parseInt(e,t);return n<9||n===11||n>13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||(n&65535)===65535||(n&65535)===65534||n>1114111?"�":String.fromCodePoint(n)}function hn(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const ft=Ha(/[A-Za-z]/),lt=Ha(/[\dA-Za-z]/),FP=Ha(/[#-'*+\--9=?A-Z^-~]/);function xc(e){return e!==null&&(e<32||e===127)}const sp=Ha(/\d/),HP=Ha(/[\dA-Fa-f]/),UP=Ha(/[!-/:-@[-`{-~]/);function ne(e){return e!==null&&e<-2}function Ae(e){return e!==null&&(e<0||e===32)}function ce(e){return e===-2||e===-1||e===32}const uu=Ha(new RegExp("\\p{P}|\\p{S}","u")),xi=Ha(/\s/);function Ha(e){return t;function t(n){return n!==null&&n>-1&&e.test(String.fromCharCode(n))}}function Nr(e){const t=[];let n=-1,a=0,r=0;for(;++n<e.length;){const s=e.charCodeAt(n);let o="";if(s===37&<(e.charCodeAt(n+1))&<(e.charCodeAt(n+2)))r=2;else if(s<128)/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(s))||(o=String.fromCharCode(s));else if(s>55295&&s<57344){const l=e.charCodeAt(n+1);s<56320&&l>56319&&l<57344?(o=String.fromCharCode(s,l),r=1):o="�"}else o=String.fromCharCode(s);o&&(t.push(e.slice(a,n),encodeURIComponent(o)),a=n+r+1,o=""),r&&(n+=r,r=0)}return t.join("")+e.slice(a)}function he(e,t,n,a){const r=a?a-1:Number.POSITIVE_INFINITY;let s=0;return o;function o(c){return ce(c)?(e.enter(n),l(c)):t(c)}function l(c){return ce(c)&&s++<r?(e.consume(c),l):(e.exit(n),t(c))}}const VP={tokenize:WP};function WP(e){const t=e.attempt(this.parser.constructs.contentInitial,a,r);let n;return t;function a(l){if(l===null){e.consume(l);return}return e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),he(e,t,"linePrefix")}function r(l){return e.enter("paragraph"),s(l)}function s(l){const c=e.enter("chunkText",{contentType:"text",previous:n});return n&&(n.next=c),n=c,o(l)}function o(l){if(l===null){e.exit("chunkText"),e.exit("paragraph"),e.consume(l);return}return ne(l)?(e.consume(l),e.exit("chunkText"),s):(e.consume(l),o)}}const $P={tokenize:YP},Mx={tokenize:GP};function YP(e){const t=this,n=[];let a=0,r,s,o;return l;function l(v){if(a<n.length){const N=n[a];return t.containerState=N[1],e.attempt(N[0].continuation,c,u)(v)}return u(v)}function c(v){if(a++,t.containerState._closeFlow){t.containerState._closeFlow=void 0,r&&b();const N=t.events.length;let I=N,C;for(;I--;)if(t.events[I][0]==="exit"&&t.events[I][1].type==="chunkFlow"){C=t.events[I][1].end;break}x(a);let R=N;for(;R<t.events.length;)t.events[R][1].end={...C},R++;return Lt(t.events,I+1,0,t.events.slice(N)),t.events.length=R,u(v)}return l(v)}function u(v){if(a===n.length){if(!r)return p(v);if(r.currentConstruct&&r.currentConstruct.concrete)return g(v);t.interrupt=!!(r.currentConstruct&&!r._gfmTableDynamicInterruptHack)}return t.containerState={},e.check(Mx,d,m)(v)}function d(v){return r&&b(),x(a),p(v)}function m(v){return t.parser.lazy[t.now().line]=a!==n.length,o=t.now().offset,g(v)}function p(v){return t.containerState={},e.attempt(Mx,f,g)(v)}function f(v){return a++,n.push([t.currentConstruct,t.containerState]),p(v)}function g(v){if(v===null){r&&b(),x(0),e.consume(v);return}return r=r||t.parser.flow(t.now()),e.enter("chunkFlow",{_tokenizer:r,contentType:"flow",previous:s}),y(v)}function y(v){if(v===null){w(e.exit("chunkFlow"),!0),x(0),e.consume(v);return}return ne(v)?(e.consume(v),w(e.exit("chunkFlow")),a=0,t.interrupt=void 0,l):(e.consume(v),y)}function w(v,N){const I=t.sliceStream(v);if(N&&I.push(null),v.previous=s,s&&(s.next=v),s=v,r.defineSkip(v.start),r.write(I),t.parser.lazy[v.start.line]){let C=r.events.length;for(;C--;)if(r.events[C][1].start.offset<o&&(!r.events[C][1].end||r.events[C][1].end.offset>o))return;const R=t.events.length;let O=R,H,P;for(;O--;)if(t.events[O][0]==="exit"&&t.events[O][1].type==="chunkFlow"){if(H){P=t.events[O][1].end;break}H=!0}for(x(a),C=R;C<t.events.length;)t.events[C][1].end={...P},C++;Lt(t.events,O+1,0,t.events.slice(R)),t.events.length=C}}function x(v){let N=n.length;for(;N-- >v;){const I=n[N];t.containerState=I[1],I[0].exit.call(t,e)}n.length=v}function b(){r.write([null]),s=void 0,r=void 0,t.containerState._closeFlow=void 0}}function GP(e,t,n){return he(e,e.attempt(this.parser.constructs.document,t,n),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function pr(e){if(e===null||Ae(e)||xi(e))return 1;if(uu(e))return 2}function du(e,t,n){const a=[];let r=-1;for(;++r<e.length;){const s=e[r].resolveAll;s&&!a.includes(s)&&(t=s(t,n),a.push(s))}return t}const op={name:"attention",resolveAll:QP,tokenize:KP};function QP(e,t){let n=-1,a,r,s,o,l,c,u,d;for(;++n<e.length;)if(e[n][0]==="enter"&&e[n][1].type==="attentionSequence"&&e[n][1]._close){for(a=n;a--;)if(e[a][0]==="exit"&&e[a][1].type==="attentionSequence"&&e[a][1]._open&&t.sliceSerialize(e[a][1]).charCodeAt(0)===t.sliceSerialize(e[n][1]).charCodeAt(0)){if((e[a][1]._close||e[n][1]._open)&&(e[n][1].end.offset-e[n][1].start.offset)%3&&!((e[a][1].end.offset-e[a][1].start.offset+e[n][1].end.offset-e[n][1].start.offset)%3))continue;c=e[a][1].end.offset-e[a][1].start.offset>1&&e[n][1].end.offset-e[n][1].start.offset>1?2:1;const m={...e[a][1].end},p={...e[n][1].start};Dx(m,-c),Dx(p,c),o={type:c>1?"strongSequence":"emphasisSequence",start:m,end:{...e[a][1].end}},l={type:c>1?"strongSequence":"emphasisSequence",start:{...e[n][1].start},end:p},s={type:c>1?"strongText":"emphasisText",start:{...e[a][1].end},end:{...e[n][1].start}},r={type:c>1?"strong":"emphasis",start:{...o.start},end:{...l.end}},e[a][1].end={...o.start},e[n][1].start={...l.end},u=[],e[a][1].end.offset-e[a][1].start.offset&&(u=Wt(u,[["enter",e[a][1],t],["exit",e[a][1],t]])),u=Wt(u,[["enter",r,t],["enter",o,t],["exit",o,t],["enter",s,t]]),u=Wt(u,du(t.parser.constructs.insideSpan.null,e.slice(a+1,n),t)),u=Wt(u,[["exit",s,t],["enter",l,t],["exit",l,t],["exit",r,t]]),e[n][1].end.offset-e[n][1].start.offset?(d=2,u=Wt(u,[["enter",e[n][1],t],["exit",e[n][1],t]])):d=0,Lt(e,a-1,n-a+3,u),n=a+u.length-d-2;break}}for(n=-1;++n<e.length;)e[n][1].type==="attentionSequence"&&(e[n][1].type="data");return e}function KP(e,t){const n=this.parser.constructs.attentionMarkers.null,a=this.previous,r=pr(a);let s;return o;function o(c){return s=c,e.enter("attentionSequence"),l(c)}function l(c){if(c===s)return e.consume(c),l;const u=e.exit("attentionSequence"),d=pr(c),m=!d||d===2&&r||n.includes(c),p=!r||r===2&&d||n.includes(a);return u._open=!!(s===42?m:m&&(r||!p)),u._close=!!(s===42?p:p&&(d||!m)),t(c)}}function Dx(e,t){e.column+=t,e.offset+=t,e._bufferIndex+=t}const XP={name:"autolink",tokenize:ZP};function ZP(e,t,n){let a=0;return r;function r(f){return e.enter("autolink"),e.enter("autolinkMarker"),e.consume(f),e.exit("autolinkMarker"),e.enter("autolinkProtocol"),s}function s(f){return ft(f)?(e.consume(f),o):f===64?n(f):u(f)}function o(f){return f===43||f===45||f===46||lt(f)?(a=1,l(f)):u(f)}function l(f){return f===58?(e.consume(f),a=0,c):(f===43||f===45||f===46||lt(f))&&a++<32?(e.consume(f),l):(a=0,u(f))}function c(f){return f===62?(e.exit("autolinkProtocol"),e.enter("autolinkMarker"),e.consume(f),e.exit("autolinkMarker"),e.exit("autolink"),t):f===null||f===32||f===60||xc(f)?n(f):(e.consume(f),c)}function u(f){return f===64?(e.consume(f),d):FP(f)?(e.consume(f),u):n(f)}function d(f){return lt(f)?m(f):n(f)}function m(f){return f===46?(e.consume(f),a=0,d):f===62?(e.exit("autolinkProtocol").type="autolinkEmail",e.enter("autolinkMarker"),e.consume(f),e.exit("autolinkMarker"),e.exit("autolink"),t):p(f)}function p(f){if((f===45||lt(f))&&a++<63){const g=f===45?p:m;return e.consume(f),g}return n(f)}}const bo={partial:!0,tokenize:JP};function JP(e,t,n){return a;function a(s){return ce(s)?he(e,r,"linePrefix")(s):r(s)}function r(s){return s===null||ne(s)?t(s):n(s)}}const q2={continuation:{tokenize:tM},exit:nM,name:"blockQuote",tokenize:eM};function eM(e,t,n){const a=this;return r;function r(o){if(o===62){const l=a.containerState;return l.open||(e.enter("blockQuote",{_container:!0}),l.open=!0),e.enter("blockQuotePrefix"),e.enter("blockQuoteMarker"),e.consume(o),e.exit("blockQuoteMarker"),s}return n(o)}function s(o){return ce(o)?(e.enter("blockQuotePrefixWhitespace"),e.consume(o),e.exit("blockQuotePrefixWhitespace"),e.exit("blockQuotePrefix"),t):(e.exit("blockQuotePrefix"),t(o))}}function tM(e,t,n){const a=this;return r;function r(o){return ce(o)?he(e,s,"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(o):s(o)}function s(o){return e.attempt(q2,t,n)(o)}}function nM(e){e.exit("blockQuote")}const B2={name:"characterEscape",tokenize:aM};function aM(e,t,n){return a;function a(s){return e.enter("characterEscape"),e.enter("escapeMarker"),e.consume(s),e.exit("escapeMarker"),r}function r(s){return UP(s)?(e.enter("characterEscapeValue"),e.consume(s),e.exit("characterEscapeValue"),e.exit("characterEscape"),t):n(s)}}const F2={name:"characterReference",tokenize:iM};function iM(e,t,n){const a=this;let r=0,s,o;return l;function l(m){return e.enter("characterReference"),e.enter("characterReferenceMarker"),e.consume(m),e.exit("characterReferenceMarker"),c}function c(m){return m===35?(e.enter("characterReferenceMarkerNumeric"),e.consume(m),e.exit("characterReferenceMarkerNumeric"),u):(e.enter("characterReferenceValue"),s=31,o=lt,d(m))}function u(m){return m===88||m===120?(e.enter("characterReferenceMarkerHexadecimal"),e.consume(m),e.exit("characterReferenceMarkerHexadecimal"),e.enter("characterReferenceValue"),s=6,o=HP,d):(e.enter("characterReferenceValue"),s=7,o=sp,d(m))}function d(m){if(m===59&&r){const p=e.exit("characterReferenceValue");return o===lt&&!rf(a.sliceSerialize(p))?n(m):(e.enter("characterReferenceMarker"),e.consume(m),e.exit("characterReferenceMarker"),e.exit("characterReference"),t)}return o(m)&&r++<s?(e.consume(m),d):n(m)}}const Rx={partial:!0,tokenize:sM},Ox={concrete:!0,name:"codeFenced",tokenize:rM};function rM(e,t,n){const a=this,r={partial:!0,tokenize:I};let s=0,o=0,l;return c;function c(C){return u(C)}function u(C){const R=a.events[a.events.length-1];return s=R&&R[1].type==="linePrefix"?R[2].sliceSerialize(R[1],!0).length:0,l=C,e.enter("codeFenced"),e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),d(C)}function d(C){return C===l?(o++,e.consume(C),d):o<3?n(C):(e.exit("codeFencedFenceSequence"),ce(C)?he(e,m,"whitespace")(C):m(C))}function m(C){return C===null||ne(C)?(e.exit("codeFencedFence"),a.interrupt?t(C):e.check(Rx,y,N)(C)):(e.enter("codeFencedFenceInfo"),e.enter("chunkString",{contentType:"string"}),p(C))}function p(C){return C===null||ne(C)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),m(C)):ce(C)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),he(e,f,"whitespace")(C)):C===96&&C===l?n(C):(e.consume(C),p)}function f(C){return C===null||ne(C)?m(C):(e.enter("codeFencedFenceMeta"),e.enter("chunkString",{contentType:"string"}),g(C))}function g(C){return C===null||ne(C)?(e.exit("chunkString"),e.exit("codeFencedFenceMeta"),m(C)):C===96&&C===l?n(C):(e.consume(C),g)}function y(C){return e.attempt(r,N,w)(C)}function w(C){return e.enter("lineEnding"),e.consume(C),e.exit("lineEnding"),x}function x(C){return s>0&&ce(C)?he(e,b,"linePrefix",s+1)(C):b(C)}function b(C){return C===null||ne(C)?e.check(Rx,y,N)(C):(e.enter("codeFlowValue"),v(C))}function v(C){return C===null||ne(C)?(e.exit("codeFlowValue"),b(C)):(e.consume(C),v)}function N(C){return e.exit("codeFenced"),t(C)}function I(C,R,O){let H=0;return P;function P(D){return C.enter("lineEnding"),C.consume(D),C.exit("lineEnding"),Y}function Y(D){return C.enter("codeFencedFence"),ce(D)?he(C,K,"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(D):K(D)}function K(D){return D===l?(C.enter("codeFencedFenceSequence"),ie(D)):O(D)}function ie(D){return D===l?(H++,C.consume(D),ie):H>=o?(C.exit("codeFencedFenceSequence"),ce(D)?he(C,B,"whitespace")(D):B(D)):O(D)}function B(D){return D===null||ne(D)?(C.exit("codeFencedFence"),R(D)):O(D)}}}function sM(e,t,n){const a=this;return r;function r(o){return o===null?n(o):(e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),s)}function s(o){return a.parser.lazy[a.now().line]?n(o):t(o)}}const hd={name:"codeIndented",tokenize:lM},oM={partial:!0,tokenize:cM};function lM(e,t,n){const a=this;return r;function r(u){return e.enter("codeIndented"),he(e,s,"linePrefix",5)(u)}function s(u){const d=a.events[a.events.length-1];return d&&d[1].type==="linePrefix"&&d[2].sliceSerialize(d[1],!0).length>=4?o(u):n(u)}function o(u){return u===null?c(u):ne(u)?e.attempt(oM,o,c)(u):(e.enter("codeFlowValue"),l(u))}function l(u){return u===null||ne(u)?(e.exit("codeFlowValue"),o(u)):(e.consume(u),l)}function c(u){return e.exit("codeIndented"),t(u)}}function cM(e,t,n){const a=this;return r;function r(o){return a.parser.lazy[a.now().line]?n(o):ne(o)?(e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),r):he(e,s,"linePrefix",5)(o)}function s(o){const l=a.events[a.events.length-1];return l&&l[1].type==="linePrefix"&&l[2].sliceSerialize(l[1],!0).length>=4?t(o):ne(o)?r(o):n(o)}}const uM={name:"codeText",previous:mM,resolve:dM,tokenize:pM};function dM(e){let t=e.length-4,n=3,a,r;if((e[n][1].type==="lineEnding"||e[n][1].type==="space")&&(e[t][1].type==="lineEnding"||e[t][1].type==="space")){for(a=n;++a<t;)if(e[a][1].type==="codeTextData"){e[n][1].type="codeTextPadding",e[t][1].type="codeTextPadding",n+=2,t-=2;break}}for(a=n-1,t++;++a<=t;)r===void 0?a!==t&&e[a][1].type!=="lineEnding"&&(r=a):(a===t||e[a][1].type==="lineEnding")&&(e[r][1].type="codeTextData",a!==r+2&&(e[r][1].end=e[a-1][1].end,e.splice(r+2,a-r-2),t-=a-r-2,a=r+2),r=void 0);return e}function mM(e){return e!==96||this.events[this.events.length-1][1].type==="characterEscape"}
vendor: 5,125 bytes, line 9686
9686function pM(e,t,n){let a=0,r,s;return o;function o(m){return e.enter("codeText"),e.enter("codeTextSequence"),l(m)}function l(m){return m===96?(e.consume(m),a++,l):(e.exit("codeTextSequence"),c(m))}function c(m){return m===null?n(m):m===32?(e.enter("space"),e.consume(m),e.exit("space"),c):m===96?(s=e.enter("codeTextSequence"),r=0,d(m)):ne(m)?(e.enter("lineEnding"),e.consume(m),e.exit("lineEnding"),c):(e.enter("codeTextData"),u(m))}function u(m){return m===null||m===32||m===96||ne(m)?(e.exit("codeTextData"),c(m)):(e.consume(m),u)}function d(m){return m===96?(e.consume(m),r++,d):r===a?(e.exit("codeTextSequence"),e.exit("codeText"),t(m)):(s.type="codeTextData",u(m))}}class hM{constructor(t){this.left=t?[...t]:[],this.right=[]}get(t){if(t<0||t>=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+t+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return t<this.left.length?this.left[t]:this.right[this.right.length-t+this.left.length-1]}get length(){return this.left.length+this.right.length}shift(){return this.setCursor(0),this.right.pop()}slice(t,n){const a=n??Number.POSITIVE_INFINITY;return a<this.left.length?this.left.slice(t,a):t>this.left.length?this.right.slice(this.right.length-a+this.left.length,this.right.length-t+this.left.length).reverse():this.left.slice(t).concat(this.right.slice(this.right.length-a+this.left.length).reverse())}splice(t,n,a){const r=n||0;this.setCursor(Math.trunc(t));const s=this.right.splice(this.right.length-r,Number.POSITIVE_INFINITY);return a&&Vr(this.left,a),s.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(t){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(t)}pushMany(t){this.setCursor(Number.POSITIVE_INFINITY),Vr(this.left,t)}unshift(t){this.setCursor(0),this.right.push(t)}unshiftMany(t){this.setCursor(0),Vr(this.right,t.reverse())}setCursor(t){if(!(t===this.left.length||t>this.left.length&&this.right.length===0||t<0&&this.left.length===0))if(t<this.left.length){const n=this.left.splice(t,Number.POSITIVE_INFINITY);Vr(this.right,n.reverse())}else{const n=this.right.splice(this.left.length+this.right.length-t,Number.POSITIVE_INFINITY);Vr(this.left,n.reverse())}}}function Vr(e,t){let n=0;if(t.length<1e4)e.push(...t);else for(;n<t.length;)e.push(...t.slice(n,n+1e4)),n+=1e4}function H2(e){const t={};let n=-1,a,r,s,o,l,c,u;const d=new hM(e);for(;++n<d.length;){for(;n in t;)n=t[n];if(a=d.get(n),n&&a[1].type==="chunkFlow"&&d.get(n-1)[1].type==="listItemPrefix"&&(c=a[1]._tokenizer.events,s=0,s<c.length&&c[s][1].type==="lineEndingBlank"&&(s+=2),s<c.length&&c[s][1].type==="content"))for(;++s<c.length&&c[s][1].type!=="content";)c[s][1].type==="chunkText"&&(c[s][1]._isInFirstContentOfListItem=!0,s++);if(a[0]==="enter")a[1].contentType&&(Object.assign(t,fM(d,n)),n=t[n],u=!0);else if(a[1]._container){for(s=n,r=void 0;s--;)if(o=d.get(s),o[1].type==="lineEnding"||o[1].type==="lineEndingBlank")o[0]==="enter"&&(r&&(d.get(r)[1].type="lineEndingBlank"),o[1].type="lineEnding",r=s);else if(!(o[1].type==="linePrefix"||o[1].type==="listItemIndent"))break;r&&(a[1].end={...d.get(r)[1].start},l=d.slice(r,n),l.unshift(a),d.splice(r,n-r+1,l))}}return Lt(e,0,Number.POSITIVE_INFINITY,d.slice(0)),!u}function fM(e,t){const n=e.get(t)[1],a=e.get(t)[2];let r=t-1;const s=[];let o=n._tokenizer;o||(o=a.parser[n.contentType](n.start),n._contentTypeTextTrailing&&(o._contentTypeTextTrailing=!0));const l=o.events,c=[],u={};let d,m,p=-1,f=n,g=0,y=0;const w=[y];for(;f;){for(;e.get(++r)[1]!==f;);s.push(r),f._tokenizer||(d=a.sliceStream(f),f.next||d.push(null),m&&o.defineSkip(f.start),f._isInFirstContentOfListItem&&(o._gfmTasklistFirstContentOfListItem=!0),o.write(d),f._isInFirstContentOfListItem&&(o._gfmTasklistFirstContentOfListItem=void 0)),m=f,f=f.next}for(f=n;++p<l.length;)l[p][0]==="exit"&&l[p-1][0]==="enter"&&l[p][1].type===l[p-1][1].type&&l[p][1].start.line!==l[p][1].end.line&&(y=p+1,w.push(y),f._tokenizer=void 0,f.previous=void 0,f=f.next);for(o.events=[],f?(f._tokenizer=void 0,f.previous=void 0):w.pop(),p=w.length;p--;){const x=l.slice(w[p],w[p+1]),b=s.pop();c.push([b,b+x.length-1]),e.splice(b,2,x)}for(c.reverse(),p=-1;++p<c.length;)u[g+c[p][0]]=g+c[p][1],g+=c[p][1]-c[p][0]-1;return u}const gM={resolve:yM,tokenize:bM},xM={partial:!0,tokenize:vM};function yM(e){return H2(e),e}function bM(e,t){let n;return a;function a(l){return e.enter("content"),n=e.enter("chunkContent",{contentType:"content"}),r(l)}function r(l){return l===null?s(l):ne(l)?e.check(xM,o,s)(l):(e.consume(l),r)}function s(l){return e.exit("chunkContent"),e.exit("content"),t(l)}function o(l){return e.consume(l),e.exit("chunkContent"),n.next=e.enter("chunkContent",{contentType:"content",previous:n}),n=n.next,r}}function vM(e,t,n){const a=this;return r;function r(o){return e.exit("chunkContent"),e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),he(e,s,"linePrefix")}function s(o){if(o===null||ne(o))return n(o);const l=a.events[a.events.length-1];return!a.parser.constructs.disable.null.includes("codeIndented")&&l&&l[1].type==="linePrefix"&&l[2].sliceSerialize(l[1],!0).length>
vendor: 17,075 bytes, line 9686
9686=4?t(o):e.interrupt(a.parser.constructs.flow,n,t)(o)}}function U2(e,t,n,a,r,s,o,l,c){const u=c||Number.POSITIVE_INFINITY;let d=0;return m;function m(x){return x===60?(e.enter(a),e.enter(r),e.enter(s),e.consume(x),e.exit(s),p):x===null||x===32||x===41||xc(x)?n(x):(e.enter(a),e.enter(o),e.enter(l),e.enter("chunkString",{contentType:"string"}),y(x))}function p(x){return x===62?(e.enter(s),e.consume(x),e.exit(s),e.exit(r),e.exit(a),t):(e.enter(l),e.enter("chunkString",{contentType:"string"}),f(x))}function f(x){return x===62?(e.exit("chunkString"),e.exit(l),p(x)):x===null||x===60||ne(x)?n(x):(e.consume(x),x===92?g:f)}function g(x){return x===60||x===62||x===92?(e.consume(x),f):f(x)}function y(x){return!d&&(x===null||x===41||Ae(x))?(e.exit("chunkString"),e.exit(l),e.exit(o),e.exit(a),t(x)):d<u&&x===40?(e.consume(x),d++,y):x===41?(e.consume(x),d--,y):x===null||x===32||x===40||xc(x)?n(x):(e.consume(x),x===92?w:y)}function w(x){return x===40||x===41||x===92?(e.consume(x),y):y(x)}}function V2(e,t,n,a,r,s){const o=this;let l=0,c;return u;function u(f){return e.enter(a),e.enter(r),e.consume(f),e.exit(r),e.enter(s),d}function d(f){return l>999||f===null||f===91||f===93&&!c||f===94&&!l&&"_hiddenFootnoteSupport"in o.parser.constructs?n(f):f===93?(e.exit(s),e.enter(r),e.consume(f),e.exit(r),e.exit(a),t):ne(f)?(e.enter("lineEnding"),e.consume(f),e.exit("lineEnding"),d):(e.enter("chunkString",{contentType:"string"}),m(f))}function m(f){return f===null||f===91||f===93||ne(f)||l++>999?(e.exit("chunkString"),d(f)):(e.consume(f),c||(c=!ce(f)),f===92?p:m)}function p(f){return f===91||f===92||f===93?(e.consume(f),l++,m):m(f)}}function W2(e,t,n,a,r,s){let o;return l;function l(p){return p===34||p===39||p===40?(e.enter(a),e.enter(r),e.consume(p),e.exit(r),o=p===40?41:p,c):n(p)}function c(p){return p===o?(e.enter(r),e.consume(p),e.exit(r),e.exit(a),t):(e.enter(s),u(p))}function u(p){return p===o?(e.exit(s),c(o)):p===null?n(p):ne(p)?(e.enter("lineEnding"),e.consume(p),e.exit("lineEnding"),he(e,u,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),d(p))}function d(p){return p===o||p===null||ne(p)?(e.exit("chunkString"),u(p)):(e.consume(p),p===92?m:d)}function m(p){return p===o||p===92?(e.consume(p),d):d(p)}}function ys(e,t){let n;return a;function a(r){return ne(r)?(e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),n=!0,a):ce(r)?he(e,a,n?"linePrefix":"lineSuffix")(r):t(r)}}const wM={name:"definition",tokenize:AM},kM={partial:!0,tokenize:CM};function AM(e,t,n){const a=this;let r;return s;function s(f){return e.enter("definition"),o(f)}function o(f){return V2.call(a,e,l,n,"definitionLabel","definitionLabelMarker","definitionLabelString")(f)}function l(f){return r=hn(a.sliceSerialize(a.events[a.events.length-1][1]).slice(1,-1)),f===58?(e.enter("definitionMarker"),e.consume(f),e.exit("definitionMarker"),c):n(f)}function c(f){return Ae(f)?ys(e,u)(f):u(f)}function u(f){return U2(e,d,n,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(f)}function d(f){return e.attempt(kM,m,m)(f)}function m(f){return ce(f)?he(e,p,"whitespace")(f):p(f)}function p(f){return f===null||ne(f)?(e.exit("definition"),a.parser.defined.push(r),t(f)):n(f)}}function CM(e,t,n){return a;function a(l){return Ae(l)?ys(e,r)(l):n(l)}function r(l){return W2(e,s,n,"definitionTitle","definitionTitleMarker","definitionTitleString")(l)}function s(l){return ce(l)?he(e,o,"whitespace")(l):o(l)}function o(l){return l===null||ne(l)?t(l):n(l)}}const EM={name:"hardBreakEscape",tokenize:NM};function NM(e,t,n){return a;function a(s){return e.enter("hardBreakEscape"),e.consume(s),r}function r(s){return ne(s)?(e.exit("hardBreakEscape"),t(s)):n(s)}}const TM={name:"headingAtx",resolve:SM,tokenize:IM};function SM(e,t){let n=e.length-2,a=3,r,s;return e[a][1].type==="whitespace"&&(a+=2),n-2>a&&e[n][1].type==="whitespace"&&(n-=2),e[n][1].type==="atxHeadingSequence"&&(a===n-1||n-4>a&&e[n-2][1].type==="whitespace")&&(n-=a+1===n?2:4),n>a&&(r={type:"atxHeadingText",start:e[a][1].start,end:e[n][1].end},s={type:"chunkText",start:e[a][1].start,end:e[n][1].end,contentType:"text"},Lt(e,a,n-a+1,[["enter",r,t],["enter",s,t],["exit",s,t],["exit",r,t]])),e}function IM(e,t,n){let a=0;return r;function r(d){return e.enter("atxHeading"),s(d)}function s(d){return e.enter("atxHeadingSequence"),o(d)}function o(d){return d===35&&a++<6?(e.consume(d),o):d===null||Ae(d)?(e.exit("atxHeadingSequence"),l(d)):n(d)}function l(d){return d===35?(e.enter("atxHeadingSequence"),c(d)):d===null||ne(d)?(e.exit("atxHeading"),t(d)):ce(d)?he(e,l,"whitespace")(d):(e.enter("atxHeadingText"),u(d))}function c(d){return d===35?(e.consume(d),c):(e.exit("atxHeadingSequence"),l(d))}function u(d){return d===null||d===35||Ae(d)?(e.exit("atxHeadingText"),l(d)):(e.consume(d),u)}}const jM=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],_x=["pre","script","style","textarea"],PM={concrete:!0,name:"htmlFlow",resolveTo:RM,tokenize:OM},MM={partial:!0,tokenize:LM},DM={partial:!0,tokenize:_M};function RM(e){let t=e.length;for(;t--&&!(e[t][0]==="enter"&&e[t][1].type==="htmlFlow"););return t>1&&e[t-2][1].type==="linePrefix"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function OM(e,t,n){const a=this;let r,s,o,l,c;return u;function u(j){return d(j)}function d(j){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(j),m}function m(j){return j===33?(e.consume(j),p):j===47?(e.consume(j),s=!0,y):j===63?(e.consume(j),r=3,a.interrupt?t:A):ft(j)?(e.consume(j),o=String.fromCharCode(j),w):n(j)}function p(j){return j===45?(e.consume(j),r=2,f):j===91?(e.consume(j),r=5,l=0,g):ft(j)?(e.consume(j),r=4,a.interrupt?t:A):n(j)}function f(j){return j===45?(e.consume(j),a.interrupt?t:A):n(j)}function g(j){const de="CDATA[";return j===de.charCodeAt(l++)?(e.consume(j),l===de.length?a.interrupt?t:K:g):n(j)}function y(j){return ft(j)?(e.consume(j),o=String.fromCharCode(j),w):n(j)}function w(j){if(j===null||j===47||j===62||Ae(j)){const de=j===47,wt=o.toLowerCase();return!de&&!s&&_x.includes(wt)?(r=1,a.interrupt?t(j):K(j)):jM.includes(o.toLowerCase())?(r=6,de?(e.consume(j),x):a.interrupt?t(j):K(j)):(r=7,a.interrupt&&!a.parser.lazy[a.now().line]?n(j):s?b(j):v(j))}return j===45||lt(j)?(e.consume(j),o+=String.fromCharCode(j),w):n(j)}function x(j){return j===62?(e.consume(j),a.interrupt?t:K):n(j)}function b(j){return ce(j)?(e.consume(j),b):P(j)}function v(j){return j===47?(e.consume(j),P):j===58||j===95||ft(j)?(e.consume(j),N):ce(j)?(e.consume(j),v):P(j)}function N(j){return j===45||j===46||j===58||j===95||lt(j)?(e.consume(j),N):I(j)}function I(j){return j===61?(e.consume(j),C):ce(j)?(e.consume(j),I):v(j)}function C(j){return j===null||j===60||j===61||j===62||j===96?n(j):j===34||j===39?(e.consume(j),c=j,R):ce(j)?(e.consume(j),C):O(j)}function R(j){return j===c?(e.consume(j),c=null,H):j===null||ne(j)?n(j):(e.consume(j),R)}function O(j){return j===null||j===34||j===39||j===47||j===60||j===61||j===62||j===96||Ae(j)?I(j):(e.consume(j),O)}function H(j){return j===47||j===62||ce(j)?v(j):n(j)}function P(j){return j===62?(e.consume(j),Y):n(j)}function Y(j){return j===null||ne(j)?K(j):ce(j)?(e.consume(j),Y):n(j)}function K(j){return j===45&&r===2?(e.consume(j),q):j===60&&r===1?(e.consume(j),F):j===62&&r===4?(e.consume(j),te):j===63&&r===3?(e.consume(j),A):j===93&&r===5?(e.consume(j),U):ne(j)&&(r===6||r===7)?(e.exit("htmlFlowData"),e.check(MM,ae,ie)(j)):j===null||ne(j)?(e.exit("htmlFlowData"),ie(j)):(e.consume(j),K)}function ie(j){return e.check(DM,B,ae)(j)}function B(j){return e.enter("lineEnding"),e.consume(j),e.exit("lineEnding"),D}function D(j){return j===null||ne(j)?ie(j):(e.enter("htmlFlowData"),K(j))}function q(j){return j===45?(e.consume(j),A):K(j)}function F(j){return j===47?(e.consume(j),o="",L):K(j)}function L(j){if(j===62){const de=o.toLowerCase();return _x.includes(de)?(e.consume(j),te):K(j)}return ft(j)&&o.length<8?(e.consume(j),o+=String.fromCharCode(j),L):K(j)}function U(j){return j===93?(e.consume(j),A):K(j)}function A(j){return j===62?(e.consume(j),te):j===45&&r===2?(e.consume(j),A):K(j)}function te(j){return j===null||ne(j)?(e.exit("htmlFlowData"),ae(j)):(e.consume(j),te)}function ae(j){return e.exit("htmlFlow"),t(j)}}function _M(e,t,n){const a=this;return r;function r(o){return ne(o)?(e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),s):n(o)}function s(o){return a.parser.lazy[a.now().line]?n(o):t(o)}}function LM(e,t,n){return a;function a(r){return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),e.attempt(bo,t,n)}}const zM={name:"htmlText",tokenize:qM};function qM(e,t,n){const a=this;let r,s,o;return l;function l(A){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(A),c}function c(A){return A===33?(e.consume(A),u):A===47?(e.consume(A),I):A===63?(e.consume(A),v):ft(A)?(e.consume(A),O):n(A)}function u(A){return A===45?(e.consume(A),d):A===91?(e.consume(A),s=0,g):ft(A)?(e.consume(A),b):n(A)}function d(A){return A===45?(e.consume(A),f):n(A)}function m(A){return A===null?n(A):A===45?(e.consume(A),p):ne(A)?(o=m,F(A)):(e.consume(A),m)}function p(A){return A===45?(e.consume(A),f):m(A)}function f(A){return A===62?q(A):A===45?p(A):m(A)}function g(A){const te="CDATA[";return A===te.charCodeAt(s++)?(e.consume(A),s===te.length?y:g):n(A)}function y(A){return A===null?n(A):A===93?(e.consume(A),w):ne(A)?(o=y,F(A)):(e.consume(A),y)}function w(A){return A===93?(e.consume(A),x):y(A)}function x(A){return A===62?q(A):A===93?(e.consume(A),x):y(A)}function b(A){return A===null||A===62?q(A):ne(A)?(o=b,F(A)):(e.consume(A),b)}function v(A){return A===null?n(A):A===63?(e.consume(A),N):ne(A)?(o=v,F(A)):(e.consume(A),v)}function N(A){return A===62?q(A):v(A)}function I(A){return ft(A)?(e.consume(A),C):n(A)}function C(A){return A===45||lt(A)?(e.consume(A),C):R(A)}function R(A){return ne(A)?(o=R,F(A)):ce(A)?(e.consume(A),R):q(A)}function O(A){return A===45||lt(A)?(e.consume(A),O):A===47||A===62||Ae(A)?H(A):n(A)}function H(A){return A===47?(e.consume(A),q):A===58||A===95||ft(A)?(e.consume(A),P):ne(A)?(o=H,F(A)):ce(A)?(e.consume(A),H):q(A)}function P(A){return A===45||A===46||A===58||A===95||lt(A)?(e.consume(A),P):Y(A)}function Y(A){return A===61?(e.consume(A),K):ne(A)?(o=Y,F(A)):ce(A)?(e.consume(A),Y):H(A)}function K(A){return A===null||A===60||A===61||A===62||A===96?n(A):A===34||A===39?(e.consume(A),r=A,ie):ne(A)?(o=K,F(A)):ce(A)?(e.consume(A),K):(e.consume(A),B)}function ie(A){return A===r?(e.consume(A),r=void 0,D):A===null?n(A):ne(A)?(o=ie,F(A)):(e.consume(A),ie)}function B(A){return A===null||A===34||A===39||A===60||A===61||A===96?n(A):A===47||A===62||Ae(A)?H(A):(e.consume(A),B)}function D(A){return A===47||A===62||Ae(A)?H(A):n(A)}function q(A){return A===62?(e.consume(A),e.exit("htmlTextData"),e.exit("htmlText"),t):n(A)}function F(A){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(A),e.exit("lineEnding"),L}function L(A){return ce(A)?he(e,U,"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(A):U(A)}function U(A){return e.enter("htmlTextData"),o(A)}}const sf={name:"labelEnd",resolveAll:UM,resolveTo:VM,tokenize:WM},BM={tokenize:$M},FM={tokenize:YM},HM={tokenize:GM};function UM(e){let t=-1;const n=[];for(;++t<e.length;){const a=e[t][1];if(n.push(e[t]),a.type==="labelImage"||a.type==="labelLink"||a.type==="labelEnd"){const r=a.type==="labelImage"?4:2;a.type="data",t+=r}}return e.length!==n.length&&Lt(e,0,e.length,n),e}function VM(e,t){let n=e.length,a=0,r,s,o,l;for(;n--;)if(r=e[n][1],s){if(r.type==="link"||r.type==="labelLink"&&r._inactive)break;e[n][0]==="enter"&&r.type==="labelLink"&&(r._inactive=!0)}else if(o){if(e[n][0]==="enter"&&(r.type==="labelImage"||r.type==="labelLink")&&!r._balanced&&(s=n,r.type!=="labelLink")){a=2;break}}else r.type==="labelEnd"&&(o=n);const c={type:e[s][1].type==="labelLink"?"link":"image",start:{...e[s][1].start},end:{...e[e.length-1][1].end}},u={type:"label",start:{...e[s][1].start},end:{...e[o][1].end}},d={type:"labelText",start:{...e[s+a+2][1].end},end:{...e[o-2][1].start}};return l=[["enter",c,t],["enter",u,t]],l=Wt(l,e.slice(s+1,s+a+3)),l=Wt(l,[["enter",d,t]]),l=Wt(l,du(t.parser.constructs.insideSpan.null,e.slice(s+a+4,o-3),t)),l=Wt(l,[["exit",d,t],e[o-2],e[o-1],["exit",u,t]]),l=Wt(l,e.slice(o+1)),l=Wt(l,[["exit",c,t]]),Lt(e,s,e.length,l),e}function WM(e,t,n){const a=this;let r=a.events.length,s,o;for(;r--;)if((a.events[r][1].type==="labelImage"||a.events[r][1].type==="labelLink")&&!a.events[r][1]._balanced){s=a.events[r][1];break}return l;function l(p){return s?s._inactive?m(p):(o=a.parser.defined.includes(hn(a.sliceSerialize({start:s.end,end:a.now()}))),e.enter("labelEnd"),e.enter("labelMarker"),e.consume(p),e.exit("labelMarker"),e.exit("labelEnd"),c):n(p)}function c(p){return p===40?e.attempt(BM,d,o?d:m)(p):p===91?e.attempt(FM,d,o?u:m)(p):o?d(p):m(p)}function u(p){return e.attempt(HM,d,m)(p)}function d(p){return t(p)}function m(p){return s._balanced=!0,n(p)}}function $M(e,t,n){return a;function a(m){return e.enter("resource"),e.enter("resourceMarker"),e.consume(m),e.exit("resourceMarker"),r}function r(m){return Ae(m)?ys(e,s)(m):s(m)}function s(m){return m===41?d(m):U2(e,o,l,"resourceDestination","resourceDestinationLiteral","resourceDestinationLiteralMarker","resourceDestinationRaw","resourceDestinationString",32)(m)}function o(m){return Ae(m)?ys(e,c)(m):d(m)}function l(m){return n(m)}function c(m){return m===34||m===39||m===40?W2(e,u,n,"resourceTitle","resourceTitleMarker","resourceTitleString")(m):d(m)}function u(m){return Ae(m)?ys(e,d)(m):d(m)}function d(m){return m===41?(e.enter("resourceMarker"),e.consume(m),e.exit("resourceMarker"),e.exit("resource"),t):n(m)}}function YM(e,t,n){const a=this;return r;function r(l){return V2.call(a,e,s,o,"reference","referenceMarker","referenceString")(l)}function s(l){return a.parser.defined.includes(hn(a.sliceSerialize(a.events[a.events.length-1][1]).slice(1,-1)))?t(l):n(l)}function o(l){return n(l)}}function GM(e,t,n){return a;function a(s){return e.enter("reference"),e.enter("referenceMarker"),e.consume(s),e.exit("referenceMarker"),r}function r(s){return s===93?(e.enter("referenceMarker"),e.consume(s),e.exit("referenceMarker"),e.exit("reference"),t):n(s)}}const QM={name:"labelStartImage",resolveAll:sf.resolveAll,tokenize:KM};function KM(e,t,n){const a=this;return r;function r(l){return e.enter("labelImage"),e.enter("labelImageMarker"),e.consume(l),e.exit("labelImageMarker"),s}function s(l){return l===91?(e.enter("labelMarker"),e.consume(l),e.exit("labelMarker"),e.exit("labelImage"),o):n(l)}function o(l){return l===94&&"_hiddenFootnoteSupport"in a.parser.constructs?n(l):t(l)}}const XM={name:"labelStartLink",resolveAll:sf.resolveAll,tokenize:ZM};function ZM(e,t,n){const a=this;return r;function r(o){return e.enter("labelLink"),e.enter("labelMarker"),e.consume(o),e.exit("labelMarker"),e.exit("labelLink"),s}function s(o){return o===94&&"_hiddenFootnoteSupport"in a.parser.constructs?n(o):t(o)}}const fd={name:"lineEnding",tokenize:JM};function JM(e,t){return n;function n(a){return e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),he(e,t,"linePrefix")}}const Sl={name:"thematicBreak",tokenize:e6};function e6(e,t,n){let a=0,r;return s;function s(u){return e.enter("thematicBreak"),o(u)}function o(u){return r=u,l(u)}function l(u){return u===r?(e.enter("thematicBreakSequence"),c(u)):a>=3&&(u===null||ne(u))?(e.exit("thematicBreak"),t(u)):n(u)}function c(u){return u===r?(e.consume(u),a++,c):(e.exit("thematicBreakSequence"),ce(u)?he(e,l,"whitespace")(u):l(u))}}const At={continuation:{tokenize:i6},exit:s6,name:"list",tokenize:a6},t6={partial:!0,tokenize:o6},n6={partial:!0,tokenize:r6};function a6(e,t,n){const a=this,r=a.events[a.events.length-1];let s=r&&r[1].type==="linePrefix"?r[2].sliceSerialize(r[1],!0).length:0,o=0;return l;function l(f){const g=a.containerState.type||(f===42||f===43||f===45?"listUnordered":"listOrdered");if(g==="listUnordered"?!a.containerState.marker||f===a.containerState.marker:sp(f)){if(a.containerState.type||(a.containerState.type=g,e.enter(g,{_container:!0})),g==="listUnordered")return e.enter("listItemPrefix"),f===42||f===45?e.check(Sl,n,u)(f):u(f);if(!a.interrupt||f===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),c(f)}return n(f)}function c(f){return sp(f)&&++o<10?(e.consume(f),c):(!a.interrupt||o<2)&&(a.containerState.marker?f===a.containerState.marker:f===41||f===46)?(e.exit("listItemValue"),u(f)):n(f)}function u(f){return e.enter("listItemMarker"),e.consume(f),e.exit("listItemMarker"),a.containerState.marker=a.containerState.marker||f,e.check(bo,a.interrupt?n:d,e.attempt(t6,p,m))}
vendor: 5,359 bytes, line 9686
9686function d(f){return a.containerState.initialBlankLine=!0,s++,p(f)}function m(f){return ce(f)?(e.enter("listItemPrefixWhitespace"),e.consume(f),e.exit("listItemPrefixWhitespace"),p):n(f)}function p(f){return a.containerState.size=s+a.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(f)}}function i6(e,t,n){const a=this;return a.containerState._closeFlow=void 0,e.check(bo,r,s);function r(l){return a.containerState.furtherBlankLines=a.containerState.furtherBlankLines||a.containerState.initialBlankLine,he(e,t,"listItemIndent",a.containerState.size+1)(l)}function s(l){return a.containerState.furtherBlankLines||!ce(l)?(a.containerState.furtherBlankLines=void 0,a.containerState.initialBlankLine=void 0,o(l)):(a.containerState.furtherBlankLines=void 0,a.containerState.initialBlankLine=void 0,e.attempt(n6,t,o)(l))}function o(l){return a.containerState._closeFlow=!0,a.interrupt=void 0,he(e,e.attempt(At,t,n),"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(l)}}function r6(e,t,n){const a=this;return he(e,r,"listItemIndent",a.containerState.size+1);function r(s){const o=a.events[a.events.length-1];return o&&o[1].type==="listItemIndent"&&o[2].sliceSerialize(o[1],!0).length===a.containerState.size?t(s):n(s)}}function s6(e){e.exit(this.containerState.type)}function o6(e,t,n){const a=this;return he(e,r,"listItemPrefixWhitespace",a.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function r(s){const o=a.events[a.events.length-1];return!ce(s)&&o&&o[1].type==="listItemPrefixWhitespace"?t(s):n(s)}}const Lx={name:"setextUnderline",resolveTo:l6,tokenize:c6};function l6(e,t){let n=e.length,a,r,s;for(;n--;)if(e[n][0]==="enter"){if(e[n][1].type==="content"){a=n;break}e[n][1].type==="paragraph"&&(r=n)}else e[n][1].type==="content"&&e.splice(n,1),!s&&e[n][1].type==="definition"&&(s=n);const o={type:"setextHeading",start:{...e[a][1].start},end:{...e[e.length-1][1].end}};return e[r][1].type="setextHeadingText",s?(e.splice(r,0,["enter",o,t]),e.splice(s+1,0,["exit",e[a][1],t]),e[a][1].end={...e[s][1].end}):e[a][1]=o,e.push(["exit",o,t]),e}function c6(e,t,n){const a=this;let r;return s;function s(u){let d=a.events.length,m;for(;d--;)if(a.events[d][1].type!=="lineEnding"&&a.events[d][1].type!=="linePrefix"&&a.events[d][1].type!=="content"){m=a.events[d][1].type==="paragraph";break}return!a.parser.lazy[a.now().line]&&(a.interrupt||m)?(e.enter("setextHeadingLine"),r=u,o(u)):n(u)}function o(u){return e.enter("setextHeadingLineSequence"),l(u)}function l(u){return u===r?(e.consume(u),l):(e.exit("setextHeadingLineSequence"),ce(u)?he(e,c,"lineSuffix")(u):c(u))}function c(u){return u===null||ne(u)?(e.exit("setextHeadingLine"),t(u)):n(u)}}const u6={tokenize:d6};function d6(e){const t=this,n=e.attempt(bo,a,e.attempt(this.parser.constructs.flowInitial,r,he(e,e.attempt(this.parser.constructs.flow,r,e.attempt(gM,r)),"linePrefix")));return n;function a(s){if(s===null){e.consume(s);return}return e.enter("lineEndingBlank"),e.consume(s),e.exit("lineEndingBlank"),t.currentConstruct=void 0,n}function r(s){if(s===null){e.consume(s);return}return e.enter("lineEnding"),e.consume(s),e.exit("lineEnding"),t.currentConstruct=void 0,n}}const m6={resolveAll:Y2()},p6=$2("string"),h6=$2("text");function $2(e){return{resolveAll:Y2(e==="text"?f6:void 0),tokenize:t};function t(n){const a=this,r=this.parser.constructs[e],s=n.attempt(r,o,l);return o;function o(d){return u(d)?s(d):l(d)}function l(d){if(d===null){n.consume(d);return}return n.enter("data"),n.consume(d),c}function c(d){return u(d)?(n.exit("data"),s(d)):(n.consume(d),c)}function u(d){if(d===null)return!0;const m=r[d];let p=-1;if(m)for(;++p<m.length;){const f=m[p];if(!f.previous||f.previous.call(a,a.previous))return!0}return!1}}}function Y2(e){return t;function t(n,a){let r=-1,s;for(;++r<=n.length;)s===void 0?n[r]&&n[r][1].type==="data"&&(s=r,r++):(!n[r]||n[r][1].type!=="data")&&(r!==s+2&&(n[s][1].end=n[r-1][1].end,n.splice(s+2,r-s-2),r=s+2),s=void 0);return e?e(n,a):n}}function f6(e,t){let n=0;for(;++n<=e.length;)if((n===e.length||e[n][1].type==="lineEnding")&&e[n-1][1].type==="data"){const a=e[n-1][1],r=t.sliceStream(a);let s=r.length,o=-1,l=0,c;for(;s--;){const u=r[s];if(typeof u=="string"){for(o=u.length;u.charCodeAt(o-1)===32;)l++,o--;if(o)break;o=-1}else if(u===-2)c=!0,l++;else if(u!==-1){s++;break}}if(t._contentTypeTextTrailing&&n===e.length&&(l=0),l){const u={type:n===e.length||c||l<2?"lineSuffix":"hardBreakTrailing",start:{_bufferIndex:s?o:a.start._bufferIndex+o,_index:a.start._index+s,line:a.end.line,column:a.end.column-l,offset:a.end.offset-l},end:{...a.end}};a.end={...u.start},a.start.offset===a.end.offset?Object.assign(a,u):(e.splice(n,0,["enter",u,t],["exit",u,t]),n+=2)}n++}return e}const g6={42:At,43:At,45:At,48:At,49:At,50:At,51:At,52:At,53:At,54:At,55:At,56:At,57:At,62:q2},x6={91:wM},y6={[-2]:hd,[-1]:hd,32:hd},b6={35:TM,42:Sl,45:[Lx,Sl],60:PM,61:Lx,95:Sl,96:Ox,126:Ox},v6={38:F2,92:B2},w6={[-5]:fd,[-4]:fd,[-3]:fd,33:QM,38:F2,42:op,60:[XP,zM],91:XM,92:[EM,B2],93:sf,95:op,96:uM},k6={null:[op,m6]},A6={null:[42,95]},C6={null:[]},E6=Object.freeze(Object.defineProperty({__proto__:null,attentionMarkers:A6,contentInitial:x6,disable:C6,document:g6,flow:b6,flowInitial:y6,insideSpan:k6,string:v6,text:w6},Symbol.toStringTag,{value:"Module"}));function N6(e,t,n){let a={_bufferIndex:-1,_index:0,line:n&&n.line||1,c
vendor: 14,639 bytes, lines 9686-9688
9686olumn:n&&n.column||1,offset:n&&n.offset||0};const r={},s=[];let o=[],l=[];const c={attempt:R(I),check:R(C),consume:b,enter:v,exit:N,interrupt:R(C,{interrupt:!0})},u={code:null,containerState:{},defineSkip:y,events:[],now:g,parser:e,previous:null,sliceSerialize:p,sliceStream:f,write:m};let d=t.tokenize.call(u,c);return t.resolveAll&&s.push(t),u;function m(Y){return o=Wt(o,Y),w(),o[o.length-1]!==null?[]:(O(t,0),u.events=du(s,u.events,u),u.events)}function p(Y,K){return S6(f(Y),K)}function f(Y){return T6(o,Y)}function g(){const{_bufferIndex:Y,_index:K,line:ie,column:B,offset:D}=a;return{_bufferIndex:Y,_index:K,line:ie,column:B,offset:D}}function y(Y){r[Y.line]=Y.column,P()}function w(){let Y;for(;a._index<o.length;){const K=o[a._index];if(typeof K=="string")for(Y=a._index,a._bufferIndex<0&&(a._bufferIndex=0);a._index===Y&&a._bufferIndex<K.length;)x(K.charCodeAt(a._bufferIndex));else x(K)}}function x(Y){d=d(Y)}function b(Y){ne(Y)?(a.line++,a.column=1,a.offset+=Y===-3?2:1,P()):Y!==-1&&(a.column++,a.offset++),a._bufferIndex<0?a._index++:(a._bufferIndex++,a._bufferIndex===o[a._index].length&&(a._bufferIndex=-1,a._index++)),u.previous=Y}function v(Y,K){const ie=K||{};return ie.type=Y,ie.start=g(),u.events.push(["enter",ie,u]),l.push(ie),ie}function N(Y){const K=l.pop();return K.end=g(),u.events.push(["exit",K,u]),K}function I(Y,K){O(Y,K.from)}function C(Y,K){K.restore()}function R(Y,K){return ie;function ie(B,D,q){let F,L,U,A;return Array.isArray(B)?ae(B):"tokenize"in B?ae([B]):te(B);function te(ye){return pt;function pt(en){const Ai=en!==null&&ye[en],Ci=en!==null&&ye.null,Ao=[...Array.isArray(Ai)?Ai:Ai?[Ai]:[],...Array.isArray(Ci)?Ci:Ci?[Ci]:[]];return ae(Ao)(en)}}function ae(ye){return F=ye,L=0,ye.length===0?q:j(ye[L])}function j(ye){return pt;function pt(en){return A=H(),U=ye,ye.partial||(u.currentConstruct=ye),ye.name&&u.parser.constructs.disable.null.includes(ye.name)?wt():ye.tokenize.call(K?Object.assign(Object.create(u),K):u,c,de,wt)(en)}}function de(ye){return Y(U,A),D}function wt(ye){return A.restore(),++L<F.length?j(F[L]):q}}}function O(Y,K){Y.resolveAll&&!s.includes(Y)&&s.push(Y),Y.resolve&&Lt(u.events,K,u.events.length-K,Y.resolve(u.events.slice(K),u)),Y.resolveTo&&(u.events=Y.resolveTo(u.events,u))}function H(){const Y=g(),K=u.previous,ie=u.currentConstruct,B=u.events.length,D=Array.from(l);return{from:B,restore:q};function q(){a=Y,u.previous=K,u.currentConstruct=ie,u.events.length=B,l=D,P()}}function P(){a.line in r&&a.column<2&&(a.column=r[a.line],a.offset+=r[a.line]-1)}}function T6(e,t){const n=t.start._index,a=t.start._bufferIndex,r=t.end._index,s=t.end._bufferIndex;let o;if(n===r)o=[e[n].slice(a,s)];else{if(o=e.slice(n,r),a>-1){const l=o[0];typeof l=="string"?o[0]=l.slice(a):o.shift()}s>0&&o.push(e[r].slice(0,s))}return o}function S6(e,t){let n=-1;const a=[];let r;for(;++n<e.length;){const s=e[n];let o;if(typeof s=="string")o=s;else switch(s){case-5:{o="\r";break}case-4:{o=` 9687`;break}case-3:{o=`\r 9688`;break}case-2:{o=t?" ":" ";break}case-1:{if(!t&&r)continue;o=" ";break}default:o=String.fromCharCode(s)}r=s===-2,a.push(o)}return a.join("")}function I6(e){const a={constructs:L2([E6,...(e||{}).extensions||[]]),content:r(VP),defined:[],document:r($P),flow:r(u6),lazy:{},string:r(p6),text:r(h6)};return a;function r(s){return o;function o(l){return N6(a,s,l)}}}function j6(e){for(;!H2(e););return e}const zx=/[\0\t\n\r]/g;function P6(){let e=1,t="",n=!0,a;return r;function r(s,o,l){const c=[];let u,d,m,p,f;for(s=t+(typeof s=="string"?s.toString():new TextDecoder(o||void 0).decode(s)),m=0,t="",n&&(s.charCodeAt(0)===65279&&m++,n=void 0);m<s.length;){if(zx.lastIndex=m,u=zx.exec(s),p=u&&u.index!==void 0?u.index:s.length,f=s.charCodeAt(p),!u){t=s.slice(m);break}if(f===10&&m===p&&a)c.push(-3),a=void 0;else switch(a&&(c.push(-5),a=void 0),m<p&&(c.push(s.slice(m,p)),e+=p-m),f){case 0:{c.push(65533),e++;break}case 9:{for(d=Math.ceil(e/4)*4,c.push(-2);e++<d;)c.push(-1);break}case 10:{c.push(-4),e=1;break}default:a=!0,e=1}m=p+1}return l&&(a&&c.push(-5),t&&c.push(t),c.push(null)),c}}const M6=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function D6(e){return e.replace(M6,R6)}function R6(e,t,n){if(t)return t;if(n.charCodeAt(0)===35){const r=n.charCodeAt(1),s=r===120||r===88;return z2(n.slice(s?2:1),s?16:10)}return rf(n)||e}const G2={}.hasOwnProperty;function O6(e,t,n){return t&&typeof t=="object"&&(n=t,t=void 0),_6(n)(j6(I6(n).document().write(P6()(e,t,!0))))}function _6(e){const t={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:s(Cf),autolinkProtocol:H,autolinkEmail:H,atxHeading:s(wf),blockQuote:s(Ci),characterEscape:H,characterReference:H,codeFenced:s(Ao),codeFencedFenceInfo:o,codeFencedFenceMeta:o,codeIndented:s(Ao,o),codeText:s(_A,o),codeTextData:H,data:H,codeFlowValue:H,definition:s(LA),definitionDestinationString:o,definitionLabelString:o,definitionTitleString:o,emphasis:s(zA),hardBreakEscape:s(kf),hardBreakTrailing:s(kf),htmlFlow:s(Af,o),htmlFlowData:H,htmlText:s(Af,o),htmlTextData:H,image:s(qA),label:o,link:s(Cf),listItem:s(BA),listItemValue:p,listOrdered:s(Ef,m),listUnordered:s(Ef),paragraph:s(FA),reference:j,referenceString:o,resourceDestinationString:o,resourceTitleString:o,setextHeading:s(wf),strong:s(HA),thematicBreak:s(VA)},exit:{atxHeading:c(),atxHeadingSequence:I,autolink:c(),autolinkEmail:Ai,autolinkProtocol:en,blockQuote:c(),characterEscapeValue:P,characterReferenceMarkerHexadecimal:wt,characterReferenceMarkerNumeric:wt,characterReferenceValue:ye,characterReference:pt,codeFenced:c(w),codeFencedFence:y,codeFencedFenceInfo:f,codeFencedFenceMeta:g,codeFlowValue:P,codeIndented:c(x),codeText:c(D),codeTextData:P,data:P,definition:c(),definitionDestinationString:N,definitionLabelString:b,definitionTitleString:v,emphasis:c(),hardBreakEscape:c(K),hardBreakTrailing:c(K),htmlFlow:c(ie),htmlFlowData:P,htmlText:c(B),htmlTextData:P,image:c(F),label:U,labelText:L,lineEnding:Y,link:c(q),listItem:c(),listOrdered:c(),listUnordered:c(),paragraph:c(),referenceString:de,resourceDestinationString:A,resourceTitleString:te,resource:ae,setextHeading:c(O),setextHeadingLineSequence:R,setextHeadingText:C,strong:c(),thematicBreak:c()}};Q2(t,(e||{}).mdastExtensions||[]);const n={};return a;function a(V){let Z={type:"root",children:[]};const se={stack:[Z],tokenStack:[],config:t,enter:l,exit:u,buffer:o,resume:d,data:n},me=[];let be=-1;for(;++be<V.length;)if(V[be][1].type==="listOrdered"||V[be][1].type==="listUnordered")if(V[be][0]==="enter")me.push(be);else{const tn=me.pop();be=r(V,tn,be)}for(be=-1;++be<V.length;){const tn=t[V[be][0]];G2.call(tn,V[be][1].type)&&tn[V[be][1].type].call(Object.assign({sliceSerialize:V[be][2].sliceSerialize},se),V[be][1])}if(se.tokenStack.length>0){const tn=se.tokenStack[se.tokenStack.length-1];(tn[1]||qx).call(se,void 0,tn[0])}for(Z.position={start:oa(V.length>0?V[0][1].start:{line:1,column:1,offset:0}),end:oa(V.length>0?V[V.length-2][1].end:{line:1,column:1,offset:0})},be=-1;++be<t.transforms.length;)Z=t.transforms[be](Z)||Z;return Z}function r(V,Z,se){let me=Z-1,be=-1,tn=!1,Ua,_n,jr,Pr;for(;++me<=se;){const Pt=V[me];switch(Pt[1].type){case"listUnordered":case"listOrdered":case"blockQuote":{Pt[0]==="enter"?be++:be--,Pr=void 0;break}case"lineEndingBlank":{Pt[0]==="enter"&&(Ua&&!Pr&&!be&&!jr&&(jr=me),Pr=void 0);break}case"linePrefix":case"listItemValue":case"listItemMarker":case"listItemPrefix":case"listItemPrefixWhitespace":break;default:Pr=void 0}if(!be&&Pt[0]==="enter"&&Pt[1].type==="listItemPrefix"||be===-1&&Pt[0]==="exit"&&(Pt[1].type==="listUnordered"||Pt[1].type==="listOrdered")){if(Ua){let Ei=me;for(_n=void 0;Ei--;){const Ln=V[Ei];if(Ln[1].type==="lineEnding"||Ln[1].type==="lineEndingBlank"){if(Ln[0]==="exit")continue;_n&&(V[_n][1].type="lineEndingBlank",tn=!0),Ln[1].type="lineEnding",_n=Ei}else if(!(Ln[1].type==="linePrefix"||Ln[1].type==="blockQuotePrefix"||Ln[1].type==="blockQuotePrefixWhitespace"||Ln[1].type==="blockQuoteMarker"||Ln[1].type==="listItemIndent"))break}jr&&(!_n||jr<_n)&&(Ua._spread=!0),Ua.end=Object.assign({},_n?V[_n][1].start:Pt[1].end),V.splice(_n||me,0,["exit",Ua,Pt[2]]),me++,se++}if(Pt[1].type==="listItemPrefix"){const Ei={type:"listItem",_spread:!1,start:Object.assign({},Pt[1].start),end:void 0};Ua=Ei,V.splice(me,0,["enter",Ei,Pt[2]]),me++,se++,jr=void 0,Pr=!0}}}return V[Z][1]._spread=tn,se}function s(V,Z){return se;function se(me){l.call(this,V(me),me),Z&&Z.call(this,me)}}function o(){this.stack.push({type:"fragment",children:[]})}function l(V,Z,se){this.stack[this.stack.length-1].children.push(V),this.stack.push(V),this.tokenStack.push([Z,se||void 0]),V.position={start:oa(Z.start),end:void 0}}function c(V){return Z;function Z(se){V&&V.call(this,se),u.call(this,se)}}function u(V,Z){const se=this.stack.pop(),me=this.tokenStack.pop();if(me)me[0].type!==V.type&&(Z?Z.call(this,V,me[0]):(me[1]||qx).call(this,V,me[0]));else throw new Error("Cannot close `"+V.type+"` ("+xs({start:V.start,end:V.end})+"): itâs not open");se.position.end=oa(V.end)}function d(){return af(this.stack.pop())}function m(){this.data.expectingFirstListItemValue=!0}function p(V){if(this.data.expectingFirstListItemValue){const Z=this.stack[this.stack.length-2];Z.start=Number.parseInt(this.sliceSerialize(V),10),this.data.expectingFirstListItemValue=void 0}}function f(){const V=this.resume(),Z=this.stack[this.stack.length-1];Z.lang=V}function g(){const V=this.resume(),Z=this.stack[this.stack.length-1];Z.meta=V}function y(){this.data.flowCodeInside||(this.buffer(),this.data.flowCodeInside=!0)}function w(){const V=this.resume(),Z=this.stack[this.stack.length-1];Z.value=V.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),this.data.flowCodeInside=void 0}function x(){const V=this.resume(),Z=this.stack[this.stack.length-1];Z.value=V.replace(/(\r?\n|\r)$/g,"")}function b(V){const Z=this.resume(),se=this.stack[this.stack.length-1];se.label=Z,se.identifier=hn(this.sliceSerialize(V)).toLowerCase()}function v(){const V=this.resume(),Z=this.stack[this.stack.length-1];Z.title=V}function N(){const V=this.resume(),Z=this.stack[this.stack.length-1];Z.url=V}function I(V){const Z=this.stack[this.stack.length-1];if(!Z.depth){const se=this.sliceSerialize(V).length;Z.depth=se}}function C(){this.data.setextHeadingSlurpLineEnding=!0}function R(V){const Z=this.stack[this.stack.length-1];Z.depth=this.sliceSerialize(V).codePointAt(0)===61?1:2}function O(){this.data.setextHeadingSlurpLineEnding=void 0}function H(V){const se=this.stack[this.stack.length-1].children;let me=se[se.length-1];(!me||me.type!=="text")&&(me=UA(),me.position={start:oa(V.start),end:void 0},se.push(me)),this.stack.push(me)}function P(V){const Z=this.stack.pop();Z.value+=this.sliceSerialize(V),Z.position.end=oa(V.end)}function Y(V){const Z=this.stack[this.stack.length-1];if(this.data.atHardBreak){const se=Z.children[Z.children.length-1];se.position.end=oa(V.end),this.data.atHardBreak=void 0;return}!this.data.setextHeadingSlurpLineEnding&&t.canContainEols.includes(Z.type)&&(H.call(this,V),P.call(this,V))}function K(){this.data.atHardBreak=!0}function ie(){const V=this.resume(),Z=this.stack[this.stack.length-1];Z.value=V}function B(){const V=this.resume(),Z=this.stack[this.stack.length-1];Z.value=V}function D(){const V=this.resume(),Z=this.stack[this.stack.length-1];Z.value=V}function q(){const V=this.stack[this.stack.length-1];if(this.data.inReference){const Z=this.data.referenceType||"shortcut";V.type+="Reference",V.referenceType=Z,delete V.url,delete V.title}else delete V.identifier,delete V.label;this.data.referenceType=void 0}function F(){const V=this.stack[this.stack.length-1];if(this.data.inReference){const Z=this.data.referenceType||"shortcut";V.type+="Reference",V.referenceType=Z,delete V.url,delete V.title}else delete V.identifier,delete V.label;this.data.referenceType=void 0}function L(V){const Z=this.sliceSerialize(V),se=this.stack[this.stack.length-2];se.label=D6(Z),se.identifier=hn(Z).toLowerCase()}function U(){const V=this.stack[this.stack.length-1],Z=this.resume(),se=this.stack[this.stack.length-1];if(this.data.inReference=!0,se.type==="link"){const me=V.children;se.children=me}else se.alt=Z}function A(){const V=this.resume(),Z=this.stack[this.stack.length-1];Z.url=V}function te(){const V=this.resume(),Z=this.stack[this.stack.length-1];Z.title=V}function ae(){this.data.inReference=void 0}function j(){this.data.referenceType="collapsed"}function de(V){const Z=this.resume(),se=this.stack[this.stack.length-1];se.label=Z,se.identifier=hn(this.sliceSerialize(V)).toLowerCase(),this.data.referenceType="full"}function wt(V){this.data.characterReferenceType=V.type}function ye(V){const Z=this.sliceSerialize(V),se=this.data.characterReferenceType;let me;se?(me=z2(Z,se==="characterReferenceMarkerNumeric"?10:16),this.data.characterReferenceType=void 0):me=rf(Z);const be=this.stack[this.stack.length-1];be.value+=me}function pt(V){const Z=this.stack.pop();Z.position.end=oa(V.end)}function en(V){P.call(this,V);const Z=this.stack[this.stack.length-1];Z.url=this.sliceSerialize(V)}function Ai(V){P.call(this,V);const Z=this.stack[this.stack.length-1];Z.url="mailto:"+this.sliceSerialize(V)}function Ci(){return{type:"blockquote",children:[]}}function Ao(){return{type:"code",lang:null,meta:null,value:""}}function _A(){return{type:"inlineCode",value:""}}function LA(){return{type:"definition",identifier:"",label:null,title:null,url:""}}function zA(){return{type:"emphasis",children:[]}}function wf(){return{type:"heading",depth:0,children:[]}}function kf(){return{type:"break"}}function Af(){return{type:"html",value:""}}function qA(){return{type:"image",title:null,url:"",alt:null}}function Cf(){return{type:"link",title:null,url:"",children:[]}}function Ef(V){return{type:"list",ordered:V.type==="listOrdered",start:null,spread:V._spread,children:[]}}function BA(V){return{type:"listItem",spread:V._spread,checked:null,children:[]}}function FA(){return{type:"paragraph",children:[]}}function HA(){return{type:"strong",children:[]}}function UA(){return{type:"text",value:""}}function VA(){return{type:"thematicBreak"}}}function oa(e){return{line:e.line,column:e.column,offset:e.offset}}function Q2(e,t){let n=-1;for(;++n<t.length;){const a=t[n];Array.isArray(a)?Q2(e,a):L6(e,a)}}function L6(e,t){let n;for(n in t)if(G2.call(t,n))switch(n){case"canContainEols":{const a=t[n];a&&e[n].push(...a);break}case"transforms":{const a=t[n];a&&e[n].push(...a);break}case"enter":case"exit":{const a=t[n];a&&Object.assign(e[n],a);break}}}function qx(e,t){throw e?new Error("Cannot close `"+e.type+"` ("+xs({start:e.start,end:e.end})+"): a different token (`"+t.type+"`, "+xs({start:t.start,end:t.end}
vendor: 4,516 bytes, lines 9688-9692
9688)+") is open"):new Error("Cannot close document, a token (`"+t.type+"`, "+xs({start:t.start,end:t.end})+") is still open")}function z6(e){const t=this;t.parser=n;function n(a){return O6(a,{...t.data("settings"),...e,extensions:t.data("micromarkExtensions")||[],mdastExtensions:t.data("fromMarkdownExtensions")||[]})}}function q6(e,t){const n={type:"element",tagName:"blockquote",properties:{},children:e.wrap(e.all(t),!0)};return e.patch(t,n),e.applyData(t,n)}function B6(e,t){const n={type:"element",tagName:"br",properties:{},children:[]};return e.patch(t,n),[e.applyData(t,n),{type:"text",value:` 9689`}]}function F6(e,t){const n=t.value?t.value+` 9690`:"",a={},r=t.lang?t.lang.split(/\s+/):[];r.length>0&&(a.className=["language-"+r[0]]);let s={type:"element",tagName:"code",properties:a,children:[{type:"text",value:n}]};return t.meta&&(s.data={meta:t.meta}),e.patch(t,s),s=e.applyData(t,s),s={type:"element",tagName:"pre",properties:{},children:[s]},e.patch(t,s),s}function H6(e,t){const n={type:"element",tagName:"del",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function U6(e,t){const n={type:"element",tagName:"em",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function V6(e,t){const n=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",a=String(t.identifier).toUpperCase(),r=Nr(a.toLowerCase()),s=e.footnoteOrder.indexOf(a);let o,l=e.footnoteCounts.get(a);l===void 0?(l=0,e.footnoteOrder.push(a),o=e.footnoteOrder.length):o=s+1,l+=1,e.footnoteCounts.set(a,l);const c={type:"element",tagName:"a",properties:{href:"#"+n+"fn-"+r,id:n+"fnref-"+r+(l>1?"-"+l:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(o)}]};e.patch(t,c);const u={type:"element",tagName:"sup",properties:{},children:[c]};return e.patch(t,u),e.applyData(t,u)}function W6(e,t){const n={type:"element",tagName:"h"+t.depth,properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function $6(e,t){if(e.options.allowDangerousHtml){const n={type:"raw",value:t.value};return e.patch(t,n),e.applyData(t,n)}}function K2(e,t){const n=t.referenceType;let a="]";if(n==="collapsed"?a+="[]":n==="full"&&(a+="["+(t.label||t.identifier)+"]"),t.type==="imageReference")return[{type:"text",value:"!["+t.alt+a}];const r=e.all(t),s=r[0];s&&s.type==="text"?s.value="["+s.value:r.unshift({type:"text",value:"["});const o=r[r.length-1];return o&&o.type==="text"?o.value+=a:r.push({type:"text",value:a}),r}function Y6(e,t){const n=String(t.identifier).toUpperCase(),a=e.definitionById.get(n);if(!a)return K2(e,t);const r={src:Nr(a.url||""),alt:t.alt};a.title!==null&&a.title!==void 0&&(r.title=a.title);const s={type:"element",tagName:"img",properties:r,children:[]};return e.patch(t,s),e.applyData(t,s)}function G6(e,t){const n={src:Nr(t.url)};t.alt!==null&&t.alt!==void 0&&(n.alt=t.alt),t.title!==null&&t.title!==void 0&&(n.title=t.title);const a={type:"element",tagName:"img",properties:n,children:[]};return e.patch(t,a),e.applyData(t,a)}function Q6(e,t){const n={type:"text",value:t.value.replace(/\r?\n|\r/g," ")};e.patch(t,n);const a={type:"element",tagName:"code",properties:{},children:[n]};return e.patch(t,a),e.applyData(t,a)}function K6(e,t){const n=String(t.identifier).toUpperCase(),a=e.definitionById.get(n);if(!a)return K2(e,t);const r={href:Nr(a.url||"")};a.title!==null&&a.title!==void 0&&(r.title=a.title);const s={type:"element",tagName:"a",properties:r,children:e.all(t)};return e.patch(t,s),e.applyData(t,s)}function X6(e,t){const n={href:Nr(t.url)};t.title!==null&&t.title!==void 0&&(n.title=t.title);const a={type:"element",tagName:"a",properties:n,children:e.all(t)};return e.patch(t,a),e.applyData(t,a)}function Z6(e,t,n){const a=e.all(t),r=n?J6(n):X2(t),s={},o=[];if(typeof t.checked=="boolean"){const d=a[0];let m;d&&d.type==="element"&&d.tagName==="p"?m=d:(m={type:"element",tagName:"p",properties:{},children:[]},a.unshift(m)),m.children.length>0&&m.children.unshift({type:"text",value:" "}),m.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:t.checked,disabled:!0},children:[]}),s.className=["task-list-item"]}let l=-1;for(;++l<a.length;){const d=a[l];(r||l!==0||d.type!=="element"||d.tagName!=="p")&&o.push({type:"text",value:` 9691`}),d.type==="element"&&d.tagName==="p"&&!r?o.push(...d.children):o.push(d)}const c=a[a.length-1];c&&(r||c.type!=="element"||c.tagName!=="p")&&o.push({type:"text",value:` 9692`});const u={type:"element",tagName:"li",properties:s,children:o};
vendor: 3,257 bytes, line 9692
9692return e.patch(t,u),e.applyData(t,u)}function J6(e){let t=!1;if(e.type==="list"){t=e.spread||!1;const n=e.children;let a=-1;for(;!t&&++a<n.length;)t=X2(n[a])}return t}function X2(e){const t=e.spread;return t??e.children.length>1}function eD(e,t){const n={},a=e.all(t);let r=-1;for(typeof t.start=="number"&&t.start!==1&&(n.start=t.start);++r<a.length;){const o=a[r];if(o.type==="element"&&o.tagName==="li"&&o.properties&&Array.isArray(o.properties.className)&&o.properties.className.includes("task-list-item")){n.className=["contains-task-list"];break}}const s={type:"element",tagName:t.ordered?"ol":"ul",properties:n,children:e.wrap(a,!0)};return e.patch(t,s),e.applyData(t,s)}function tD(e,t){const n={type:"element",tagName:"p",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function nD(e,t){const n={type:"root",children:e.wrap(e.all(t))};return e.patch(t,n),e.applyData(t,n)}function aD(e,t){const n={type:"element",tagName:"strong",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function iD(e,t){const n=e.all(t),a=n.shift(),r=[];if(a){const o={type:"element",tagName:"thead",properties:{},children:e.wrap([a],!0)};e.patch(t.children[0],o),r.push(o)}if(n.length>0){const o={type:"element",tagName:"tbody",properties:{},children:e.wrap(n,!0)},l=Rn(t.children[1]),c=cu(t.children[t.children.length-1]);l&&c&&(o.position={start:l,end:c}),r.push(o)}const s={type:"element",tagName:"table",properties:{},children:e.wrap(r,!0)};return e.patch(t,s),e.applyData(t,s)}function rD(e,t,n){const a=n?n.children:void 0,s=(a?a.indexOf(t):1)===0?"th":"td",o=n&&n.type==="table"?n.align:void 0,l=o?o.length:t.children.length;let c=-1;const u=[];for(;++c<l;){const m=t.children[c],p={},f=o?o[c]:void 0;f&&(p.align=f);let g={type:"element",tagName:s,properties:p,children:[]};m&&(g.children=e.all(m),e.patch(m,g),g=e.applyData(m,g)),u.push(g)}const d={type:"element",tagName:"tr",properties:{},children:e.wrap(u,!0)};return e.patch(t,d),e.applyData(t,d)}function sD(e,t){const n={type:"element",tagName:"td",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}const Bx=9,Fx=32;function oD(e){const t=String(e),n=/\r?\n|\r/g;let a=n.exec(t),r=0;const s=[];for(;a;)s.push(Hx(t.slice(r,a.index),r>0,!0),a[0]),r=a.index+a[0].length,a=n.exec(t);return s.push(Hx(t.slice(r),r>0,!1)),s.join("")}function Hx(e,t,n){let a=0,r=e.length;if(t){let s=e.codePointAt(a);for(;s===Bx||s===Fx;)a++,s=e.codePointAt(a)}if(n){let s=e.codePointAt(r-1);for(;s===Bx||s===Fx;)r--,s=e.codePointAt(r-1)}return r>a?e.slice(a,r):""}function lD(e,t){const n={type:"text",value:oD(String(t.value))};return e.patch(t,n),e.applyData(t,n)}function cD(e,t){const n={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(t,n),e.applyData(t,n)}const uD={blockquote:q6,break:B6,code:F6,delete:H6,emphasis:U6,footnoteReference:V6,heading:W6,html:$6,imageReference:Y6,image:G6,inlineCode:Q6,linkReference:K6,link:X6,listItem:Z6,list:eD,paragraph:tD,root:nD,strong:aD,table:iD,tableCell:sD,tableRow:rD,text:lD,thematicBreak:cD,toml:Go,yaml:Go,definition:Go,footnoteDefinition:Go};function Go(){}const Z2=-1,mu=0,bs=1,yc=2,of=3,lf=4,cf=5,uf=6,J2=7,ek=8,{defineProperty:dD}=Object,tk=typeof self=="object"?self:globalThis,Ux=(e,t)=>
vendor: 4,047 bytes, line 9692
9692{switch(e){case"Function":case"SharedWorker":case"Worker":case"eval":case"setInterval":case"setTimeout":throw new TypeError("unable to deserialize "+e)}return new tk[e](t)},mD=(e,t)=>{const n=(r,s)=>(e.set(s,r),r),a=r=>{if(e.has(r))return e.get(r);const[s,o]=t[r];switch(s){case mu:case Z2:return n(o,r);case bs:{const l=n([],r);for(const c of o)l.push(a(c));return l}case yc:{const l=n({},r);for(const[c,u]of o){const d=a(c),m=a(u);d==="__proto__"?dD(l,d,{value:m,configurable:!0,enumerable:!0,writable:!0}):l[d]=m}return l}case of:return n(new Date(o),r);case lf:{const{source:l,flags:c}=o;return n(new RegExp(l,c),r)}case cf:{const l=n(new Map,r);for(const[c,u]of o)l.set(a(c),a(u));return l}case uf:{const l=n(new Set,r);for(const c of o)l.add(a(c));return l}case J2:{const{name:l,message:c}=o;return n(typeof tk[l]=="function"?Ux(l,c):new Error(c),r)}case ek:return n(BigInt(o),r);case"BigInt":return n(Object(BigInt(o)),r);case"ArrayBuffer":return n(new Uint8Array(o).buffer,o);case"DataView":{const{buffer:l}=new Uint8Array(o);return n(new DataView(l),o)}case"-0":return-0}return n(Ux(s,o),r)};return a},Vx=e=>mD(new Map,e)(0),Qa="",{toString:pD}={},{keys:hD,is:fD}=Object,Wr=e=>{const t=typeof e;if(t!=="object"||!e)return[mu,t];const n=pD.call(e).slice(8,-1);switch(n){case"Array":return[bs,Qa];case"Object":return[yc,Qa];case"Date":return[of,Qa];case"RegExp":return[lf,Qa];case"Map":return[cf,Qa];case"Set":return[uf,Qa];case"DataView":return[bs,n]}return n.includes("Array")?[bs,n]:e instanceof Error?[J2,e.name||"Error"]:[yc,n]},Qo=([e,t])=>e===mu&&(t==="function"||t==="symbol"),gD=(e,t,n,a)=>{const r=(o,l)=>{const c=a.push(o)-1;return n.set(l,c),c},s=o=>{if(n.has(o))return n.get(o);let[l,c]=Wr(o);switch(l){case mu:{let d=o;switch(c){case"bigint":l=ek,d=o.toString();break;case"number":if(!o&&fD(o,-0))return a.push(["-0"])-1;break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+c);d=null;break;case"undefined":return r([Z2],o)}return r([l,d],o)}case bs:{if(c){let p=o;return c==="DataView"?p=new Uint8Array(o.buffer):c==="ArrayBuffer"&&(p=new Uint8Array(o)),r([c,[...p]],o)}const d=[],m=r([l,d],o);for(const p of o)d.push(s(p));return m}case yc:{if(c)switch(c){case"BigInt":return r([c,o.toString()],o);case"Boolean":case"Number":case"String":return r([c,o.valueOf()],o)}if(t&&"toJSON"in o)return s(o.toJSON());const d=[],m=r([l,d],o);for(const p of hD(o))(e||!Qo(Wr(o[p])))&&d.push([s(p),s(o[p])]);return m}case of:return r([l,isNaN(o.getTime())?Qa:o.toISOString()],o);case lf:{const{source:d,flags:m}=o;return r([l,{source:d,flags:m}],o)}case cf:{const d=[],m=r([l,d],o);for(const[p,f]of o)(e||!(Qo(Wr(p))||Qo(Wr(f))))&&d.push([s(p),s(f)]);return m}case uf:{const d=[],m=r([l,d],o);for(const p of o)(e||!Qo(Wr(p)))&&d.push(s(p));return m}}const{message:u}=o;return r([l,{name:c,message:u}],o)};return s},Wx=(e,{json:t,lossy:n}={})=>{const a=[];return gD(!(t||n),!!t,new Map,a)(e),a},hr=typeof structuredClone=="function"?(e,t)=>t&&("json"in t||"lossy"in t)?Vx(Wx(e,t)):structuredClone(e):(e,t)=>Vx(Wx(e,t));function xD(e,t){const n=[{type:"text",value:"â©"}];return t>1&&n.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(t)}]}),n}function yD(e,t){return"Back to reference "+(e+1)+(t>1?"-"+t:"")}function bD(e){const t=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",n=e.options.footnoteBackContent||xD,a=e.options.footnoteBackLabel||yD,r=e.options.footnoteLabel||"Footnotes",s=e.options.footnoteLabelTagName||"h2",o=e.options.footnoteLabelProperties||{className:["sr-only"]},l=[];let c=-1;for(;++c<e.footnoteOrder.length;){const u=e.footnoteById.get(e.footnoteOrder[c]);if(!u)continue;const d=e.all(u),m=String(u.identifier).toUpperCase(),p=Nr(m.toLowerCase());let f=0;const g=[],y=e.footnoteCounts.get(m);for(;y!==void 0&&++f<=y;){g.length>0&&g.push({type:"text",value:" "});let b=typeof n=="string"?n:n(c,f);typeof b=="string"&&(b={type:"text",value:b}),g.push({type:"element",tagName:"a",properties:{href:"#"+t+"fnref-"+p+(f>
vendor: 18,049 bytes, lines 9692-9698
96921?"-"+f:""),dataFootnoteBackref:"",ariaLabel:typeof a=="string"?a:a(c,f),className:["data-footnote-backref"]},children:Array.isArray(b)?b:[b]})}const w=d[d.length-1];if(w&&w.type==="element"&&w.tagName==="p"){const b=w.children[w.children.length-1];b&&b.type==="text"?b.value+=" ":w.children.push({type:"text",value:" "}),w.children.push(...g)}else d.push(...g);const x={type:"element",tagName:"li",properties:{id:t+"fn-"+p},children:e.wrap(d,!0)};e.patch(u,x),l.push(x)}if(l.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:s,properties:{...hr(o),id:"footnote-label"},children:[{type:"text",value:r}]},{type:"text",value:` 9693`},{type:"element",tagName:"ol",properties:{},children:e.wrap(l,!0)},{type:"text",value:` 9694`}]}}const pu=function(e){if(e==null)return AD;if(typeof e=="function")return hu(e);if(typeof e=="object")return Array.isArray(e)?vD(e):wD(e);if(typeof e=="string")return kD(e);throw new Error("Expected function, string, or object as test")};function vD(e){const t=[];let n=-1;for(;++n<e.length;)t[n]=pu(e[n]);return hu(a);function a(...r){let s=-1;for(;++s<t.length;)if(t[s].apply(this,r))return!0;return!1}}function wD(e){const t=e;return hu(n);function n(a){const r=a;let s;for(s in e)if(r[s]!==t[s])return!1;return!0}}function kD(e){return hu(t);function t(n){return n&&n.type===e}}function hu(e){return t;function t(n,a,r){return!!(CD(n)&&e.call(this,n,typeof a=="number"?a:void 0,r||void 0))}}function AD(){return!0}function CD(e){return e!==null&&typeof e=="object"&&"type"in e}const nk=[],ED=!0,lp=!1,ND="skip";function ak(e,t,n,a){let r;typeof t=="function"&&typeof n!="function"?(a=n,n=t):r=t;const s=pu(r),o=a?-1:1;l(e,void 0,[])();function l(c,u,d){const m=c&&typeof c=="object"?c:{};if(typeof m.type=="string"){const f=typeof m.tagName=="string"?m.tagName:typeof m.name=="string"?m.name:void 0;Object.defineProperty(p,"name",{value:"node ("+(c.type+(f?"<"+f+">":""))+")"})}return p;function p(){let f=nk,g,y,w;if((!t||s(c,u,d[d.length-1]||void 0))&&(f=TD(n(c,d)),f[0]===lp))return f;if("children"in c&&c.children){const x=c;if(x.children&&f[0]!==ND)for(y=(a?x.children.length:-1)+o,w=d.concat(x);y>-1&&y<x.children.length;){const b=x.children[y];if(g=l(b,y,w)(),g[0]===lp)return g;y=typeof g[1]=="number"?g[1]:y+o}}return f}}}function TD(e){return Array.isArray(e)?e:typeof e=="number"?[ED,e]:e==null?nk:[e]}function fu(e,t,n,a){let r,s,o;typeof t=="function"&&typeof n!="function"?(s=void 0,o=t,r=n):(s=t,o=n,r=a),ak(e,s,l,r);function l(c,u){const d=u[u.length-1],m=d?d.children.indexOf(c):void 0;return o(c,m,d)}}const cp={}.hasOwnProperty,SD={};function ID(e,t){const n=t||SD,a=new Map,r=new Map,s=new Map,o={...uD,...n.handlers},l={all:u,applyData:PD,definitionById:a,footnoteById:r,footnoteCounts:s,footnoteOrder:[],handlers:o,one:c,options:n,patch:jD,wrap:DD};return fu(e,function(d){if(d.type==="definition"||d.type==="footnoteDefinition"){const m=d.type==="definition"?a:r,p=String(d.identifier).toUpperCase();m.has(p)||m.set(p,d)}}),l;function c(d,m){const p=d.type,f=l.handlers[p];if(cp.call(l.handlers,p)&&f)return f(l,d,m);if(l.options.passThrough&&l.options.passThrough.includes(p)){if("children"in d){const{children:y,...w}=d,x=hr(w);return x.children=l.all(d),x}return hr(d)}return(l.options.unknownHandler||MD)(l,d,m)}function u(d){const m=[];if("children"in d){const p=d.children;let f=-1;for(;++f<p.length;){const g=l.one(p[f],d);if(g){if(f&&p[f-1].type==="break"&&(!Array.isArray(g)&&g.type==="text"&&(g.value=$x(g.value)),!Array.isArray(g)&&g.type==="element")){const y=g.children[0];y&&y.type==="text"&&(y.value=$x(y.value))}Array.isArray(g)?m.push(...g):m.push(g)}}}return m}}function jD(e,t){e.position&&(t.position=gP(e))}function PD(e,t){let n=t;if(e&&e.data){const a=e.data.hName,r=e.data.hChildren,s=e.data.hProperties;if(typeof a=="string")if(n.type==="element")n.tagName=a;else{const o="children"in n?n.children:[n];n={type:"element",tagName:a,properties:{},children:o}}n.type==="element"&&s&&Object.assign(n.properties,hr(s)),"children"in n&&n.children&&r!==null&&r!==void 0&&(n.children=r)}return n}function MD(e,t){const n=t.data||{},a="value"in t&&!(cp.call(n,"hProperties")||cp.call(n,"hChildren"))?{type:"text",value:t.value}:{type:"element",tagName:"div",properties:{},children:e.all(t)};return e.patch(t,a),e.applyData(t,a)}function DD(e,t){const n=[];let a=-1;for(t&&n.push({type:"text",value:` 9695`});++a<e.length;)a&&n.push({type:"text",value:` 9696`}),n.push(e[a]);return t&&e.length>0&&n.push({type:"text",value:` 9697`}),n}function $x(e){let t=0,n=e.charCodeAt(t);for(;n===9||n===32;)t++,n=e.charCodeAt(t);return e.slice(t)}function Yx(e,t){const n=ID(e,t),a=n.one(e,void 0),r=bD(n),s=Array.isArray(a)?{type:"root",children:a}:a||{type:"root",children:[]};return r&&s.children.push({type:"text",value:` 9698`},r),s}function RD(e,t){return e&&"run"in e?async function(n,a){const r=Yx(n,{file:a,...t});await e.run(r,a)}:function(n,a){return Yx(n,{file:a,...e||t})}}function Gx(e){if(e)throw e}var Il=Object.prototype.hasOwnProperty,ik=Object.prototype.toString,Qx=Object.defineProperty,Kx=Object.getOwnPropertyDescriptor,Xx=function(t){return typeof Array.isArray=="function"?Array.isArray(t):ik.call(t)==="[object Array]"},Zx=function(t){if(!t||ik.call(t)!=="[object Object]")return!1;var n=Il.call(t,"constructor"),a=t.constructor&&t.constructor.prototype&&Il.call(t.constructor.prototype,"isPrototypeOf");if(t.constructor&&!n&&!a)return!1;var r;for(r in t);return typeof r>"u"||Il.call(t,r)},Jx=function(t,n){Qx&&n.name==="__proto__"?Qx(t,n.name,{enumerable:!0,configurable:!0,value:n.newValue,writable:!0}):t[n.name]=n.newValue},ey=function(t,n){if(n==="__proto__")if(Il.call(t,n)){if(Kx)return Kx(t,n).value}else return;return t[n]},OD=function e(){var t,n,a,r,s,o,l=arguments[0],c=1,u=arguments.length,d=!1;for(typeof l=="boolean"&&(d=l,l=arguments[1]||{},c=2),(l==null||typeof l!="object"&&typeof l!="function")&&(l={});c<u;++c)if(t=arguments[c],t!=null)for(n in t)a=ey(l,n),r=ey(t,n),l!==r&&(d&&r&&(Zx(r)||(s=Xx(r)))?(s?(s=!1,o=a&&Xx(a)?a:[]):o=a&&Zx(a)?a:{},Jx(l,{name:n,newValue:e(d,o,r)})):typeof r<"u"&&Jx(l,{name:n,newValue:r}));return l};const gd=yi(OD);function up(e){if(typeof e!="object"||e===null)return!1;const t=Object.getPrototypeOf(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)}function _D(){const e=[],t={run:n,use:a};return t;function n(...r){let s=-1;const o=r.pop();if(typeof o!="function")throw new TypeError("Expected function as last argument, not "+o);l(null,...r);function l(c,...u){const d=e[++s];let m=-1;if(c){o(c);return}for(;++m<r.length;)(u[m]===null||u[m]===void 0)&&(u[m]=r[m]);r=u,d?LD(d,l)(...u):o(null,...u)}}function a(r){if(typeof r!="function")throw new TypeError("Expected `middelware` to be a function, not "+r);return e.push(r),t}}function LD(e,t){let n;return a;function a(...o){const l=e.length>o.length;let c;l&&o.push(r);try{c=e.apply(this,o)}catch(u){const d=u;if(l&&n)throw d;return r(d)}l||(c&&c.then&&typeof c.then=="function"?c.then(s,r):c instanceof Error?r(c):s(c))}function r(o,...l){n||(n=!0,t(o,...l))}function s(o){r(null,o)}}const kn={basename:zD,dirname:qD,extname:BD,join:FD,sep:"/"};function zD(e,t){if(t!==void 0&&typeof t!="string")throw new TypeError('"ext" argument must be a string');vo(e);let n=0,a=-1,r=e.length,s;if(t===void 0||t.length===0||t.length>e.length){for(;r--;)if(e.codePointAt(r)===47){if(s){n=r+1;break}}else a<0&&(s=!0,a=r+1);return a<0?"":e.slice(n,a)}if(t===e)return"";let o=-1,l=t.length-1;for(;r--;)if(e.codePointAt(r)===47){if(s){n=r+1;break}}else o<0&&(s=!0,o=r+1),l>-1&&(e.codePointAt(r)===t.codePointAt(l--)?l<0&&(a=r):(l=-1,a=o));return n===a?a=o:a<0&&(a=e.length),e.slice(n,a)}function qD(e){if(vo(e),e.length===0)return".";let t=-1,n=e.length,a;for(;--n;)if(e.codePointAt(n)===47){if(a){t=n;break}}else a||(a=!0);return t<0?e.codePointAt(0)===47?"/":".":t===1&&e.codePointAt(0)===47?"//":e.slice(0,t)}function BD(e){vo(e);let t=e.length,n=-1,a=0,r=-1,s=0,o;for(;t--;){const l=e.codePointAt(t);if(l===47){if(o){a=t+1;break}continue}n<0&&(o=!0,n=t+1),l===46?r<0?r=t:s!==1&&(s=1):r>-1&&(s=-1)}return r<0||n<0||s===0||s===1&&r===n-1&&r===a+1?"":e.slice(r,n)}function FD(...e){let t=-1,n;for(;++t<e.length;)vo(e[t]),e[t]&&(n=n===void 0?e[t]:n+"/"+e[t]);return n===void 0?".":HD(n)}function HD(e){vo(e);const t=e.codePointAt(0)===47;let n=UD(e,!t);return n.length===0&&!t&&(n="."),n.length>0&&e.codePointAt(e.length-1)===47&&(n+="/"),t?"/"+n:n}function UD(e,t){let n="",a=0,r=-1,s=0,o=-1,l,c;for(;++o<=e.length;){if(o<e.length)l=e.codePointAt(o);else{if(l===47)break;l=47}if(l===47){if(!(r===o-1||s===1))if(r!==o-1&&s===2){if(n.length<2||a!==2||n.codePointAt(n.length-1)!==46||n.codePointAt(n.length-2)!==46){if(n.length>2){if(c=n.lastIndexOf("/"),c!==n.length-1){c<0?(n="",a=0):(n=n.slice(0,c),a=n.length-1-n.lastIndexOf("/")),r=o,s=0;continue}}else if(n.length>0){n="",a=0,r=o,s=0;continue}}t&&(n=n.length>0?n+"/..":"..",a=2)}else n.length>0?n+="/"+e.slice(r+1,o):n=e.slice(r+1,o),a=o-r-1;r=o,s=0}else l===46&&s>-1?s++:s=-1}return n}function vo(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const VD={cwd:WD};function WD(){return"/"}function dp(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function $D(e){if(typeof e=="string")e=new URL(e);else if(!dp(e)){const t=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code="ERR_INVALID_ARG_TYPE",t}if(e.protocol!=="file:"){const t=new TypeError("The URL must be of scheme file");throw t.code="ERR_INVALID_URL_SCHEME",t}return YD(e)}function YD(e){if(e.hostname!==""){const a=new TypeError('File URL host must be "localhost" or empty on darwin');throw a.code="ERR_INVALID_FILE_URL_HOST",a}const t=e.pathname;let n=-1;for(;++n<t.length;)if(t.codePointAt(n)===37&&t.codePointAt(n+1)===50){const a=t.codePointAt(n+2);if(a===70||a===102){const r=new TypeError("File URL path must not include encoded / characters");throw r.code="ERR_INVALID_FILE_URL_PATH",r}}return decodeURIComponent(t)}const xd=["history","path","basename","stem","extname","dirname"];class rk{constructor(t){let n;t?dp(t)?n={path:t}:typeof t=="string"||GD(t)?n={value:t}:n=t:n={},this.cwd="cwd"in n?"":VD.cwd(),this.data={},this.history=[],this.messages=[],this.value,this.map,this.result,this.stored;let a=-1;for(;++a<xd.length;){const s=xd[a];s in n&&n[s]!==void 0&&n[s]!==null&&(this[s]=s==="history"?[...n[s]]:n[s])}let r;for(r in n)xd.includes(r)||(this[r]=n[r])}get basename(){return typeof this.path=="string"?kn.basename(this.path):void 0}set basename(t){bd(t,"basename"),yd(t,"basename"),this.path=kn.join(this.dirname||"",t)}get dirname(){return typeof this.path=="string"?kn.dirname(this.path):void 0}set dirname(t){ty(this.basename,"dirname"),this.path=kn.join(t||"",this.basename)}get extname(){return typeof this.path=="string"?kn.extname(this.path):void 0}set extname(t){if(yd(t,"extname"),ty(this.dirname,"extname"),t){if(t.codePointAt(0)!==46)throw new Error("`extname` must start with `.`");if(t.includes(".",1))throw new Error("`extname` cannot contain multiple dots")}this.path=kn.join(this.dirname,this.stem+(t||""))}get path(){return this.history[this.history.length-1]}set path(t){dp(t)&&(t=$D(t)),bd(t,"path"),this.path!==t&&this.history.push(t)}get stem(){return typeof this.path=="string"?kn.basename(this.path,this.extname):void 0}set stem(t){bd(t,"stem"),yd(t,"stem"),this.path=kn.join(this.dirname||"",t+(this.extname||""))}fail(t,n,a){const r=this.message(t,n,a);throw r.fatal=!0,r}info(t,n,a){const r=this.message(t,n,a);return r.fatal=void 0,r}message(t,n,a){const r=new dt(t,n,a);return this.path&&(r.name=this.path+":"+r.name,r.file=this.path),r.fatal=!1,this.messages.push(r),r}toString(t){return this.value===void 0?"":typeof this.value=="string"?this.value:new TextDecoder(t||void 0).decode(this.value)}}function yd(e,t){if(e&&e.includes(kn.sep))throw new Error("`"+t+"` cannot be a path: did not expect `"+kn.sep+"`")}function bd(e,t){if(!e)throw new Error("`"+t+"` cannot be empty")}function ty(e,t){if(!e)throw new Error("Setting `"+t+"` requires `path` to be set too")}function GD(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const QD=function(e){const a=this.constructor.prototype,r=a[e],s=function(){return r.apply(s,arguments)};return Object.setPrototypeOf(s,a),s},KD={}.hasOwnProperty;class df extends QD{constructor(){super("copy"),this.Compiler=void 0,this.Parser=void 0,this.attachers=[],this.compiler=void 0,this.freezeIndex=-1,this.frozen=void 0,this.namespace={},this.parser=void 0,this.transformers=_D()}copy(){const t=new df;let n=-1;for(;++n<this.attachers.length;){const a=this.attachers[n];t.use(...a)}return t.data(gd(!0,{},this.namespace)),t}data(t,n){return typeof t=="string"?arguments.length===2?(kd("data",this.frozen),this.namespace[t]=n,this):KD.call(this.namespace,t)&&this.namespace[t]||void 0:t?(kd("data",this.frozen),this.namespace=t,this):this.namespace}freeze(){if(this.frozen)return this;const t=this;for(;++this.freezeIndex<this.attachers.length;){const[n,...a]=this.attachers[this.freezeIndex];if(a[0]===!1)continue;a[0]===!0&&(a[0]=void 0);const r=n.call(t,...a);typeof r=="function"&&this.transformers.use(r)}return this.frozen=!0,this.freezeIndex=Number.POSITIVE_INFINITY,this}parse(t){this.freeze();const n=Ko(t),a=this.parser||this.Parser;return vd("parse",a),a(String(n),n)}process(t,n){const a=this;return this.freeze(),vd("process",this.parser||this.Parser),wd("process",this.compiler||this.Compiler),n?r(void 0,n):new Promise(r);function r(s,o){const l=Ko(t),c=a.parse(l);a.run(c,l,function(d,m,p){if(d||!m||!p)return u(d);const f=m,g=a.stringify(f,p);JD(g)?p.value=g:p.result=g,u(d,p)});function u(d,m){d||!m?o(d):s?s(m):n(void 0,m)}}}processSync(t){let n=!1,a;return this.freeze(),vd("processSync",this.parser||this.Parser),wd("processSync",this.compiler||this.Compiler),this.process(t,r),ay("processSync","process",n),a;function r(s,o){n=!0,Gx(s),a=o}}run(t,n,a){ny(t),this.freeze();const r=this.transformers;return!a&&typeof n=="function"&&(a=n,n=void 0),a?s(void 0,a):new Promise(s);function s(o,l){const c=Ko(n);r.run(t,c,u);function u(d,m,p){const f=m||t;d?l(d):o?o(f):a(void 0,f,p)}}}runSync(t,n){let a=!1,r;return this.run(t,n,s),ay("runSync","run",a),r;function s(o,l){Gx(o),r=l,a=!0}}stringify(t,n){this.freeze();const a=Ko(n),r=this.compiler||this.Compiler;return wd("stringify",r),ny(t),r(t,a)}use(t,...n){const a=this.attachers,r=this.namespace;if(kd("use",this.frozen),t!=null)if(typeof t=="function")c(t,n);else if(typeof t=="object")Array.isArray(t)?l(t):o(t);else throw new TypeError("Expected usable value, not `"+t+"`");return this;function s(u){if(typeof u=="function")c(u,[]);else if(typeof u=="object")if(Array.isArray(u)){const[d,...m]=u;c(d,m)}else o(u);else throw new TypeError("Expected usable value, not `"+u+"`")}function o(u){if(!("plugins"in u)&&!("settings"in u))throw new Error("Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither");l(u.plugins),u.settings&&(r.settings=gd(!0,r.settings,u.settings))}function l(u){let d=-1;if(u!=null)if(Array.isArray(u))for(;++d<u.length;){const m=u[d];s(m)}else throw new TypeError("Expected a list of plugins, not `"+u+"`")}function c(u,d){let m=-1,p=-1;for(;++m<a.length;)if(a[m][0]===u){p=m;break}if(p===-1)a.push([u,...d]);else if(d.length>0){let[f,...g]=d;const y=a[p][1];up(y)&&up(f)&&(f=gd(!0,y,f)),a[p]=[u,f,...g]}}}}const XD=new df().freeze();function vd(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function wd(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function kd(e,t){if(t)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function ny(e){if(!up(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function ay(e,t,n){if(!n)throw new Error("`"+e+"` finished async. Use `"+t+"` instead")}function Ko(e){return ZD(e)?e:new rk(e)}function ZD(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function JD(e){return typeof e=="string"||eR(e)}function eR(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const tR="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",iy=[],ry={allowDangerousHtml:!0},nR=/^(https?|ircs?|mailto|xmpp)$/i,aR=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"className",id:"remove-classname"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function iR(e){const t=rR(e),n=sR(e);return oR(t.runSync(t.parse(n),n),e)}function rR(e){const t=e.rehypePlugins||iy,n=e.remarkPlugins||iy,a=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...ry}:ry;
vendor: 4,346 bytes, line 9698
9698return XD().use(z6).use(n).use(RD,a).use(t)}function sR(e){const t=e.children||"",n=new rk;return typeof t=="string"&&(n.value=t),n}function oR(e,t){const n=t.allowedElements,a=t.allowElement,r=t.components,s=t.disallowedElements,o=t.skipHtml,l=t.unwrapDisallowed,c=t.urlTransform||lR;for(const d of aR)Object.hasOwn(t,d.from)&&(""+d.from+(d.to?"use `"+d.to+"` instead":"remove it")+tR+d.id,void 0);return fu(e,u),wP(e,{Fragment:i.Fragment,components:r,ignoreInvalidStyle:!0,jsx:i.jsx,jsxs:i.jsxs,passKeys:!0,passNode:!0});function u(d,m,p){if(d.type==="raw"&&p&&typeof m=="number")return o?p.children.splice(m,1):p.children[m]={type:"text",value:d.value},m;if(d.type==="element"){let f;for(f in pd)if(Object.hasOwn(pd,f)&&Object.hasOwn(d.properties,f)){const g=d.properties[f],y=pd[f];(y===null||y.includes(d.tagName))&&(d.properties[f]=c(String(g||""),f,d))}}if(d.type==="element"){let f=n?!n.includes(d.tagName):s?s.includes(d.tagName):!1;if(!f&&a&&typeof m=="number"&&(f=!a(d,m,p)),f&&p&&typeof m=="number")return l&&d.children?p.children.splice(m,1,...d.children):p.children.splice(m,1),m}}}function lR(e){const t=e.indexOf(":"),n=e.indexOf("?"),a=e.indexOf("#"),r=e.indexOf("/");return t===-1||r!==-1&&t>r||n!==-1&&t>n||a!==-1&&t>a||nR.test(e.slice(0,t))?e:""}const sy=/[#.]/g;function cR(e,t){const n=e||"",a={};let r=0,s,o;for(;r<n.length;){sy.lastIndex=r;const l=sy.exec(n),c=n.slice(r,l?l.index:n.length);c&&(s?s==="#"?a.id=c:Array.isArray(a.className)?a.className.push(c):a.className=[c]:o=c,r+=c.length),l&&(s=l[0],r++)}return{type:"element",tagName:o||t||"div",properties:a,children:[]}}function sk(e,t,n){const a=n?pR(n):void 0;function r(s,o,...l){let c;if(s==null){c={type:"root",children:[]};const u=o;l.unshift(u)}else{c=cR(s,t);const u=c.tagName.toLowerCase(),d=a?a.get(u):void 0;if(c.tagName=d||u,uR(o))l.unshift(o);else for(const[m,p]of Object.entries(o))dR(e,c.properties,m,p)}for(const u of l)mp(c.children,u);return c.type==="element"&&c.tagName==="template"&&(c.content={type:"root",children:c.children},c.children=[]),c}return r}function uR(e){if(e===null||typeof e!="object"||Array.isArray(e))return!0;if(typeof e.type!="string")return!1;const t=e,n=Object.keys(e);for(const a of n){const r=t[a];if(r&&typeof r=="object"){if(!Array.isArray(r))return!0;const s=r;for(const o of s)if(typeof o!="number"&&typeof o!="string")return!0}}return!!("children"in e&&Array.isArray(e.children))}function dR(e,t,n,a){const r=ou(e,n);let s;if(a!=null){if(typeof a=="number"){if(Number.isNaN(a))return;s=a}else typeof a=="boolean"?s=a:typeof a=="string"?r.spaceSeparated?s=wx(a):r.commaSeparated?s=gx(a):r.commaOrSpaceSeparated?s=wx(gx(a).join(" ")):s=oy(r,r.property,a):Array.isArray(a)?s=[...a]:s=r.property==="style"?mR(a):String(a);if(Array.isArray(s)){const o=[];for(const l of s)o.push(oy(r,r.property,l));s=o}r.property==="className"&&Array.isArray(t.className)&&(s=t.className.concat(s)),t[r.property]=s}}function mp(e,t){if(t!=null)if(typeof t=="number"||typeof t=="string")e.push({type:"text",value:String(t)});else if(Array.isArray(t))for(const n of t)mp(e,n);else if(typeof t=="object"&&"type"in t)t.type==="root"?mp(e,t.children):e.push(t);else throw new Error("Expected node, nodes, or string, got `"+t+"`")}function oy(e,t,n){if(typeof n=="string"){if(e.number&&n&&!Number.isNaN(Number(n)))return Number(n);if((e.boolean||e.overloadedBoolean)&&(n===""||Ks(n)===Ks(t)))return!0}return n}function mR(e){const t=[];for(const[n,a]of Object.entries(e))t.push([n,a].join(": "));return t.join("; ")}function pR(e){const t=new Map;for(const n of e)t.set(n.toLowerCase(),n);return t}const hR=["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","solidColor","textArea","textPath"],fR=sk(yo,"div"),gR=sk(Fa,"g",hR);function xR(e){const t=String(e),n=[];return{toOffset:r,toPoint:a};function a(s){if(typeof s=="number"&&s>-1&&s<=t.length){let o=0;for(;;){let l=n[o];
vendor: 4,041 bytes, lines 9698-9699
9698if(l===void 0){const c=ly(t,n[o-1]);l=c===-1?t.length+1:c+1,n[o]=l}if(l>s)return{line:o+1,column:s-(o>0?n[o-1]:0)+1,offset:s};o++}}}function r(s){if(s&&typeof s.line=="number"&&typeof s.column=="number"&&!Number.isNaN(s.line)&&!Number.isNaN(s.column)){for(;n.length<s.line;){const l=n[n.length-1],c=ly(t,l),u=c===-1?t.length+1:c+1;if(l===u)break;n.push(u)}const o=(s.line>1?n[s.line-2]:0)+s.column-1;if(o<n[s.line-1])return o}}}function ly(e,t){const n=e.indexOf("\r",t),a=e.indexOf(` 9699`,t);return a===-1?n:n===-1||n+1===a?a:n<a?n:a}const ni={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},ok={}.hasOwnProperty,yR=Object.prototype;function bR(e,t){const n=t||{};return mf({file:n.file||void 0,location:!1,schema:n.space==="svg"?Fa:yo,verbose:n.verbose||!1},e)}function mf(e,t){let n;switch(t.nodeName){case"#comment":{const a=t;return n={type:"comment",value:a.data},jl(e,a,n),n}case"#document":case"#document-fragment":{const a=t,r="mode"in a?a.mode==="quirks"||a.mode==="limited-quirks":!1;if(n={type:"root",children:lk(e,t.childNodes),data:{quirksMode:r}},e.file&&e.location){const s=String(e.file),o=xR(s),l=o.toPoint(0),c=o.toPoint(s.length);n.position={start:l,end:c}}return n}case"#documentType":{const a=t;return n={type:"doctype"},jl(e,a,n),n}case"#text":{const a=t;return n={type:"text",value:a.value},jl(e,a,n),n}default:return n=vR(e,t),n}}function lk(e,t){let n=-1;const a=[];for(;++n<t.length;){const r=mf(e,t[n]);a.push(r)}return a}function vR(e,t){const n=e.schema;e.schema=t.namespaceURI===ni.svg?Fa:yo;let a=-1;const r={};for(;++a<t.attrs.length;){const l=t.attrs[a],c=(l.prefix?l.prefix+":":"")+l.name;ok.call(yR,c)||(r[c]=l.value)}const o=(e.schema.space==="svg"?gR:fR)(t.tagName,r,lk(e,t.childNodes));if(jl(e,t,o),o.tagName==="template"){const l=t,c=l.sourceCodeLocation,u=c&&c.startTag&&Gi(c.startTag),d=c&&c.endTag&&Gi(c.endTag),m=mf(e,l.content);u&&d&&e.file&&(m.position={start:u.end,end:d.start}),o.content=m}return e.schema=n,o}function jl(e,t,n){if("sourceCodeLocation"in t&&t.sourceCodeLocation&&e.file){const a=wR(e,n,t.sourceCodeLocation);a&&(e.location=!0,n.position=a)}}function wR(e,t,n){const a=Gi(n);if(t.type==="element"){const r=t.children[t.children.length-1];if(a&&!n.endTag&&r&&r.position&&r.position.end&&(a.end=Object.assign({},r.position.end)),e.verbose){const s={};let o;if(n.attrs)for(o in n.attrs)ok.call(n.attrs,o)&&(s[ou(e.schema,o).property]=Gi(n.attrs[o]));n.startTag;const l=Gi(n.startTag),c=n.endTag?Gi(n.endTag):void 0,u={opening:l};c&&(u.closing=c),u.properties=s,t.data={position:u}}}return a}function Gi(e){const t=cy({line:e.startLine,column:e.startCol,offset:e.startOffset}),n=cy({line:e.endLine,column:e.endCol,offset:e.endOffset});return t||n?{start:t,end:n}:void 0}function cy(e){return e.line&&e.column?e:void 0}const uy={}.hasOwnProperty;function ck(e,t){const n=t||{};function a(r,...s){let o=a.invalid;const l=a.handlers;if(r&&uy.call(r,e)){const c=String(r[e]);o=uy.call(l,c)?l[c]:a.unknown}if(o)return o.call(this,r,...s)}return a.handlers=n.handlers||{},a.invalid=n.invalid,a.unknown=n.unknown,a}const kR={},AR={}.hasOwnProperty,uk=ck("type",{handlers:{root:ER,element:jR,text:SR,comment:IR,doctype:TR}});function CR(e,t){const a=(t||kR).space;return uk(e,a==="svg"?Fa:yo)}function ER(e,t){const n={nodeName:"#document",mode:(e.data||{}).quirksMode?"quirks":"no-quirks",childNodes:[]};return n.childNodes=pf(e.children,n,t),Tr(e,n),n}function NR(e,t){const n={nodeName:"#document-fragment",childNodes:[]};return n.childNodes=pf(e.children,n,t),Tr(e,n),n}function TR(e){const t={nodeName:"#documentType",name:"html",publicId:"",systemId:"",parentNode:null};return Tr(e,t),t}function SR(e){const t={nodeName:"#text",value:e.value,parentNode:null};return Tr(e,t),t}function IR(e){const t={nodeName:"#comment",data:e.value,parentNode:null};return Tr(e,t),t}function jR(e,t){const n=t;let a=n;
vendor: 10,237 bytes, line 9699
9699e.type==="element"&&e.tagName.toLowerCase()==="svg"&&n.space==="html"&&(a=Fa);const r=[];let s;if(e.properties){for(s in e.properties)if(s!=="children"&&AR.call(e.properties,s)){const c=PR(a,s,e.properties[s]);c&&r.push(c)}}const o=a.space,l={nodeName:e.tagName,tagName:e.tagName,attrs:r,namespaceURI:ni[o],childNodes:[],parentNode:null};return l.childNodes=pf(e.children,l,a),Tr(e,l),e.tagName==="template"&&e.content&&(l.content=NR(e.content,a)),l}function PR(e,t,n){const a=ou(e,t);if(n===!1||n===null||n===void 0||typeof n=="number"&&Number.isNaN(n)||!n&&a.boolean)return;Array.isArray(n)&&(n=a.commaSeparated?k2(n):j2(n));const r={name:a.attribute,value:n===!0?"":String(n)};if(a.space&&a.space!=="html"&&a.space!=="svg"){const s=r.name.indexOf(":");s<0?r.prefix="":(r.name=r.name.slice(s+1),r.prefix=a.attribute.slice(0,s)),r.namespace=ni[a.space]}return r}function pf(e,t,n){let a=-1;const r=[];if(e)for(;++a<e.length;){const s=uk(e[a],n);s.parentNode=t,r.push(s)}return r}function Tr(e,t){const n=e.position;n&&n.start&&n.end&&(n.start.offset,n.end.offset,t.sourceCodeLocation={startLine:n.start.line,startCol:n.start.column,startOffset:n.start.offset,endLine:n.end.line,endCol:n.end.column,endOffset:n.end.offset})}const MR=["area","base","basefont","bgsound","br","col","command","embed","frame","hr","image","img","input","keygen","link","meta","param","source","track","wbr"],DR=new Set([65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111]),Ie="�";var k;(function(e){e[e.EOF=-1]="EOF",e[e.NULL=0]="NULL",e[e.TABULATION=9]="TABULATION",e[e.CARRIAGE_RETURN=13]="CARRIAGE_RETURN",e[e.LINE_FEED=10]="LINE_FEED",e[e.FORM_FEED=12]="FORM_FEED",e[e.SPACE=32]="SPACE",e[e.EXCLAMATION_MARK=33]="EXCLAMATION_MARK",e[e.QUOTATION_MARK=34]="QUOTATION_MARK",e[e.AMPERSAND=38]="AMPERSAND",e[e.APOSTROPHE=39]="APOSTROPHE",e[e.HYPHEN_MINUS=45]="HYPHEN_MINUS",e[e.SOLIDUS=47]="SOLIDUS",e[e.DIGIT_0=48]="DIGIT_0",e[e.DIGIT_9=57]="DIGIT_9",e[e.SEMICOLON=59]="SEMICOLON",e[e.LESS_THAN_SIGN=60]="LESS_THAN_SIGN",e[e.EQUALS_SIGN=61]="EQUALS_SIGN",e[e.GREATER_THAN_SIGN=62]="GREATER_THAN_SIGN",e[e.QUESTION_MARK=63]="QUESTION_MARK",e[e.LATIN_CAPITAL_A=65]="LATIN_CAPITAL_A",e[e.LATIN_CAPITAL_Z=90]="LATIN_CAPITAL_Z",e[e.RIGHT_SQUARE_BRACKET=93]="RIGHT_SQUARE_BRACKET",e[e.GRAVE_ACCENT=96]="GRAVE_ACCENT",e[e.LATIN_SMALL_A=97]="LATIN_SMALL_A",e[e.LATIN_SMALL_Z=122]="LATIN_SMALL_Z"})(k||(k={}));const kt={DASH_DASH:"--",CDATA_START:"[CDATA[",DOCTYPE:"doctype",SCRIPT:"script",PUBLIC:"public",SYSTEM:"system"};function dk(e){return e>=55296&&e<=57343}function RR(e){return e>=56320&&e<=57343}function OR(e,t){return(e-55296)*1024+9216+t}function mk(e){return e!==32&&e!==10&&e!==13&&e!==9&&e!==12&&e>=1&&e<=31||e>=127&&e<=159}function pk(e){return e>=64976&&e<=65007||DR.has(e)}var z;(function(e){e.controlCharacterInInputStream="control-character-in-input-stream",e.noncharacterInInputStream="noncharacter-in-input-stream",e.surrogateInInputStream="surrogate-in-input-stream",e.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",e.endTagWithAttributes="end-tag-with-attributes",e.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",e.unexpectedSolidusInTag="unexpected-solidus-in-tag",e.unexpectedNullCharacter="unexpected-null-character",e.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",e.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",e.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",e.missingEndTagName="missing-end-tag-name",e.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",e.unknownNamedCharacterReference="unknown-named-character-reference",e.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",e.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",e.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",e.eofBeforeTagName="eof-before-tag-name",e.eofInTag="eof-in-tag",e.missingAttributeValue="missing-attribute-value",e.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",e.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",e.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",e.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",e.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",e.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",e.missingDoctypePublicIdentifier="missing-doctype-public-identifier",e.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",e.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",e.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",e.cdataInHtmlContent="cdata-in-html-content",e.incorrectlyOpenedComment="incorrectly-opened-comment",e.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",e.eofInDoctype="eof-in-doctype",e.nestedComment="nested-comment",e.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",e.eofInComment="eof-in-comment",e.incorrectlyClosedComment="incorrectly-closed-comment",e.eofInCdata="eof-in-cdata",e.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",e.nullCharacterReference="null-character-reference",e.surrogateCharacterReference="surrogate-character-reference",e.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",e.controlCharacterReference="control-character-reference",e.noncharacterCharacterReference="noncharacter-character-reference",e.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",e.missingDoctypeName="missing-doctype-name",e.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",e.duplicateAttribute="duplicate-attribute",e.nonConformingDoctype="non-conforming-doctype",e.missingDoctype="missing-doctype",e.misplacedDoctype="misplaced-doctype",e.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",e.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",e.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",e.openElementsLeftAfterEof="open-elements-left-after-eof",e.abandonedHeadElementChild="abandoned-head-element-child",e.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",e.nestedNoscriptInHead="nested-noscript-in-head",e.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text"})(z||(z={}));const _R=65536;class LR{constructor(t){this.handler=t,this.html="",this.pos=-1,this.lastGapPos=-2,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=_R,this.isEol=!1,this.lineStartPos=0,this.droppedBufferSize=0,this.line=1,this.lastErrOffset=-1}get col(){return this.pos-this.lineStartPos+ +(this.lastGapPos!==this.pos)}get offset(){return this.droppedBufferSize+this.pos}getError(t,n){const{line:a,col:r,offset:s}=this,o=r+n,l=s+n;return{code:t,startLine:a,endLine:a,startCol:o,endCol:o,startOffset:l,endOffset:l}}_err(t){this.handler.onParseError&&this.lastErrOffset!==this.offset&&(this.lastErrOffset=this.offset,this.handler.onParseError(this.getError(t,0)))}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(t){if(this.pos!==this.html.length-1){const n=this.html.charCodeAt(this.pos+1);if(RR(n))return this.pos++,this._addGap(),OR(t,n)}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,k.EOF;return this._err(z.surrogateInInputStream),t}willDropParsedChunk(){return this.pos>this.bufferWaterline}dropParsedChunk(){this.willDropParsedChunk()&&(this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0)}write(t,n){this.html.length>0?this.html+=t:this.html=t,this.endOfChunkHit=!1,this.lastChunkWritten=n}insertHtmlAtCurrentPos(t){this.html=this.html.substring(0,this.pos+1)+t+this.html.substring(this.pos+1),this.endOfChunkHit=!1}startsWith(t,n){if(this.pos+t.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,!1;if(n)return this.html.startsWith(t,this.pos);for(let a=0;a<t.length;a++)if((this.html.charCodeAt(this.pos+a)|32)!==t.charCodeAt(a))return!1;return!0}peek(t){const n=this.pos+t;if(n>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,k.EOF;const a=this.html.charCodeAt(n);return a===k.CARRIAGE_RETURN?k.LINE_FEED:a}advance(){if(this.pos++,this.isEol&&(this.isEol=!1,this.line++,this.lineStartPos=this.pos),this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,k.EOF;let t=this.html.charCodeAt(this.pos);return t===k.CARRIAGE_RETURN?(this.isEol=!0,this.skipNextNewLine=!0,k.LINE_FEED):t===k.LINE_FEED&&(this.isEol=!0,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=!1,this._addGap(),this.advance()):(this.skipNextNewLine=!1,dk(t)&&(t=this._processSurrogate(t)),this.handler.onParseError===null||t>31&&t<127||t===k.LINE_FEED||t===k.CARRIAGE_RETURN||t>159&&t<64976||this._checkForProblematicCharacters(t),t)}_checkForProblematicCharacters(t){mk(t)?this._err(z.controlCharacterInInputStream):pk(t)&&this._err(z.noncharacterInInputStream)}retreat(t){for(this.pos-=t;this.pos<this.lastGapPos;)this.lastGapPos=this.gapStack.pop(),this.pos--;this.isEol=!1}}var le;(function(e){e[e.CHARACTER=0]="CHARACTER",e[e.NULL_CHARACTER=1]="NULL_CHARACTER",e[e.WHITESPACE_CHARACTER=2]="WHITESPACE_CHARACTER",e[e.START_TAG=3]="START_TAG",e[e.END_TAG=4]="END_TAG",e[e.COMMENT=5]="COMMENT",e[e.DOCTYPE=6]="DOCTYPE",e[e.EOF=7]="EOF",e[e.HIBERNATION=8]="HIBERNATION"})(le||(le={}));function hk(e,t){for(let n=e.attrs.length-1;n>=0;n--)if(e.attrs[n].name===t)return e.attrs[n].value;return null}const zR=new Uint16Array('
vendor: 16,129 bytes, line 9699
9699áµ<ÃıÊÒÕ»×ÙµÛÞ¢ßà à©àªà¶¡à¹à¼à¼¦áá¨á¡ááááá¥\0\0\0\0\0\0á«áá¦á°á·á½¾â â°âââ»ââ ¤â¤â´â¹â¿ããºã¹ã¬ã£¾ã¨¨ã©±ã« 㬮à EMabcfglmnoprstu\\bfms�¦³¹ÃÃligè»ÃäPè»&ä¦cuteè»Ãäreve;äÄiyx}rcè»Ãä;är;ìðraveè»Ãäpha;äacr;äd;æ©Ägp¡on;äf;ìð¸plyFunction;æ¡ingè»Ã
ä
Äcs¾Ãr;ìðign;æildeè»Ãämlè»ÃäÐaceforsuåûþÄÄĢħĪÄcrêòkslash;æÅ¶Ã¶Ã¸;æ«§ed;æy;äÆcrtÄ
ÄÄause;æµnoullis;æ¬a;är;ìð
pf;ìð¹eve;äcòÄmpeq;æÜHOacdefhilorsuÅÅÅÆÆÆ¢ÆµÆ·ÆºÇÈɳɸɾcy;ä§PYè»Â©ä©ÆcpyÅŢźute;äÄ;iŧŨætalDifferentialD;æ
leys;æÈaeioÆÆÆÆron;ädilè»Ãärc;änint;æ°ot;äÄdnƧÆilla;ä¸terDot;ä·Ã²Å¿i;ä§rcleÈDMPTÇÇÇÇot;æinus;ælus;æimes;æoÄcsǢǸkwiseContourIntegral;æ²eCurlyÄDQÈÈoubleQuote;æuote;æÈlnpuÈȨÉÉonÄ;eȥȦæ·;æ©´ÆgitȯȶȺruent;æ¡nt;æ¯ourIntegral;æ®ÄfrÉÉ;æoduct;ænterClockwiseContourIntegral;æ³oss;樯cr;ìðpÄ;CÊÊ
æap;æÖDJSZacefiosÊ Ê¬Ê°Ê´Ê¸ËËˡ˦̳ÒÄ;oŹʥtrahd;æ¤cy;äcy;ä
cy;äÆgrsÊ¿ËËger;æ¡r;æ¡hv;櫤ÄayËËron;ä;älÄ;tËËæa;är;ìðÄaf˫̧Äcm˰̢riticalÈADGTÌÌÌÌcute;ä´oÅ´ÌÌ;äbleAcute;ärave;ä ilde;äond;æferentialD;æ
Ѱ̽\0\0\0ÍÍ\0Ð
f;ìð»Æ;DEÍÍÍä¨ot;æqual;æbleÌCDLRUVͣͲÎÏϢϸontourIntegraìȹoɴ͹\0\0ͻ»ÍnArrow;æÄeoÎΤftÆARTÎÎΡrrow;æightArrow;æeÃ¥ËngÄLRΫÏeftÄARγιrrow;æ¸ightArrow;æºightArrow;æ¹ightÄATÏÏrrow;æee;æ¨pÉÏ©\0\0ϯrrow;æownArrow;æerticalBar;æ¥nÌABLRTaÐЪаÑѿͼrrowÆ;BUÐÐТæar;æ¤pArrow;æµreve;äeftËк\0Ñ\0ÑightVector;æ¥eeVector;æ¥ectorÄ;BÑÑæ½ar;æ¥ightÇѧ\0ѱeeVector;æ¥ectorÄ;BѺѻæar;æ¥eeÄ;AÒÒæ¤rrow;æ§ÄctÒÒr;ìðrok;äà NTacdfglmopqstuxÒ½ÓÓÓÓÓ¢Ó§Ó®ÓµÔ¡Ô¯Ô¶ÕÕÕ Õ¥G;ä
Hè»Ãäcuteè»ÃäÆaiyÓÓÓron;ärcè»Ãä;äot;är;ìðraveè»Ãäement;æÄapÓºÓ¾cr;ätyÉÔ\0\0ÔmallSquare;æ»erySmallSquare;æ«ÄgpÔ¦Ôªon;äf;ìð¼silon;äuÄaiÔ¼ÕlÄ;TÕÕæ©µilde;ælibrium;æÄciÕÕr;æ°m;橳a;ämlè»ÃäÄipÕªÕ¯sts;æonentialE;æ
ÊcfiosÖ
ÖÖÖ²×y;ä¤r;ìðlledÉÖ\0\0Ö£mallSquare;æ¼erySmallSquare;æªÍ°Öº\0Ö¿\0\0×f;ìð½All;æriertrf;æ±cÃ²×ØJTabcdfgorst×¨×¬×¯×ºØØØØØØ£Ù¬Ù²cy;äè»>ä¾mmaÄ;d׷׸ä;äreve;äÆeiyØØØdil;ä¢rc;ä;äot;ä r;ìð;æpf;ìð¾eaterÌEFGLSTصÙÙÙÙÙ¦qualÄ;Lؾؿæ¥ess;æullEqual;æ§reater;檢ess;æ·lantEqual;橾ilde;æ³cr;ìð¢;æ«ÐAacfiosuÚ
ÚÚÚÚÚªÚ¾ÛRDcy;äªÄctÚÚek;ä;äirc;ä¤r;ælbertSpace;æÇ°Ú¯\0Ú²f;æizontalLine;æÄctÛÛ
òکrok;ä¦mpÅÛÛownHumðįqual;æÜEJOacdfgmnostuÛºÛ¾ÜÜÜÜÜܡܨÝݸÞÞÞcy;älig;ä²cy;äcuteè»ÃäÄiyÜÜrcè»Ãä;äot;ä°r;æraveè»ÃäÆ;apÜ Ü¯Ü¿ÄcgÜ´Ü·r;äªinaryI;æ
lieóÏÇ´Ý\0Ý¢Ä;eÝÝæ¬ÄgrÝÝral;æ«section;æisibleÄCTݬݲomma;æ£imes;æ¢ÆgptÝ¿ÞÞon;ä®f;ìða;äcr;æilde;ä¨Ç«Þ\0Þcy;älè»ÃäÊcfosuÞ¬Þ·Þ¼ßßÄiyÞ±Þµrc;ä´;är;ìðpf;ìðÇ£ß\0ßr;ìð¥rcy;äkcy;äÎHJacfosߤߨ߽߬߱à à cy;ä¥cy;äppa;äÄeyß¶ß»dil;ä¶;är;ìðpf;ìðcr;ìð¦ÖJTaceflmostà ¥à ©à ¬à¡à¡£à¦³à¦¸à§à§à¨·à©cy;äè»<ä¼Êcmnprà ·à ¼à¡à¡à¡ute;ä¹bda;äg;æªlacetrf;ær;æÆaeyà¡à¡à¡¡ron;ä½dil;ä»;äÄfsࡨ॰tÔACDFRTUVarࡾࢩࢱࣦ࣠ࣼयà¥Î४Änrà¢à¢gleBracket;æ¨rowÆ;BRà¢à¢à¢æar;æ¤ightArrow;æeiling;æoǵࢷ\0à£bleBracket;æ¦nÇà£\0à£eeVector;楡ectorÄ;Bà£à£æar;æ¥loor;æightÄAV࣯ࣵrrow;æector;æ¥Äerà¤à¤eÆ;AVà¤à¤à¤æ£rrow;æ¤ector;æ¥iangleÆ;BEतथऩæ²ar;æ§qual;æ´pÆDTVषà¥à¥ownVector;æ¥eeVector;æ¥ ectorÄ;Bà¥à¥æ¿ar;æ¥ectorÄ;B॥०æ¼ar;æ¥ightáÎsÌEFGLSTॾà¦à¦à¦à¦¢à¦qualGreater;æullEqual;æ¦reater;æ¶ess;檡lantEqual;橽ilde;æ²r;ìðÄ;eঽাæftarrow;æidot;ä¿Ænpwà§à¨à¨gÈLRlrà§à§·à¨à¨eftÄAR০৬rrow;æµightArrow;æ·ightArrow;æ¶eftÄarγà¨ightáοightáÏf;ìðerÄLRਢਬeftArrow;æightArrow;æÆchtਾà©à©Ã²à¡;æ°rok;ä
;æªÐacefiosuà©à©à© ੷੼àª
àªàªp;æ¤
y;äÄdl੥੯iumSpace;ælintrf;æ³r;ìðnusPlus;æpf;ìðcò੶;äÒJacefostuણધàªà«à¬à¬à¶à¶à¶cy;äcute;ä
Æaey઴હાron;ä
dil;ä
;äÆgswà«à«°à¬ativeÆMTVà«à«à«¨ediumSpace;æhiÄcn૦à«Ã«à«eryThiîà«tedÄGL૸à¬reaterGreateòٳessLesóà©Line;är;ìðÈBnptଢନଷ଺reak;æ BreakingSpace;ä f;æÚ;CDEGHLNPRSTVàààªà¼à®¡à¯«à°à±à²à²¦à³àµ¡à¶
櫬Äouàà¤ngruent;æ¢pCap;æoubleVerticalBar;æ¦Ælqxà®à®à®ement;æualÄ;Tà®à®æ ilde;ìâ̸ists;æreaterÎ;EFGLSTஶஷ஽à¯à¯à¯à¯¥æ¯qual;æ±ullEqual;ìâ§Ì¸reater;ìâ«Ì¸ess;æ¹lantEqual;ì⩾̸ilde;æµumpÅ௲௽ownHump;ìâ̸qual;ìâ̸eÄfsà°à°§tTriangleÆ;BEà°à°à°¡æªar;ìâ§Ì¸qual;æ¬sÌ;EGLSTవశ఼à±à±à±æ®qual;æ°reater;æ¸ess;ìâªÌ¸lantEqual;ì⩽̸ilde;æ´estedÄGL౨౹reaterGreater;ì⪢̸essLess;ì⪡̸recedesÆ;ESà²à²à²æqual;ì⪯̸lantEqual;æ ÄeiಫಹverseElement;æghtTriangleÆ;BEà³à³à³æ«ar;ìâ§Ì¸qual;æÄquà³à´uareSuÄbp೨೹setÄ;Eà³°à³³ìâ̸qual;æ¢ersetÄ;Eà´à´ìâ̸qual;æ£Æbcpà´à´¤àµsetÄ;Eà´à´ìââqual;æceedsÈ;ESTà´²à´³à´»àµæqual;ì⪰̸lantEqual;æ¡ilde;ìâ¿Ì¸ersetÄ;Eàµàµìââqual;æildeÈ;EFT൮൯൵ൿæqual;æullEqual;æilde;æerticalBar;æ¤cr;ìð©ildeè»Ãä;äÜEacdfgmoprstuvà¶½à·à·à·à·à· à·§à·¼à¸à¸ ยา฿à¹lig;ä
cuteè»ÃäÄiyà·à·rcè»Ãä;äblac;ä
r;ìðraveè»ÃäÆaei෮ෲ෶cr;ä
ga;ä©cron;äpf;ìðenCurlyÄDQà¸à¸oubleQuote;æuote;æ;æ©Äclวฬr;ìðªashè»ÃäiŬื฼deè»Ãäes;樷mlè»ÃäerÄBPà¹à¹ Äarà¹à¹r;æ¾acÄekà¹à¹;æet;æ´arenthesis;æÒacfhilors๿àºàºàºàºàºàºàº°à»¼rtialD;æy;är;ìði;ä¦;ä usMinus;ä±ÄipຢàºncareplanÃ¥Úf;æÈ;eio຺ູ໠໤檻cedesÈ;ESTà»à»à»à»æºqual;檯lantEqual;æ¼ilde;æ¾me;æ³Ädp໩໮uct;æortionÄ;aȥ໹l;æÄcià¼à¼r;ìð«;ä¨ÈUfosà¼à¼à¼à¼OTè»"ä¢r;ìðpf;æcr;ìð¬ØBEacefhiorsu༾à½à½à½ ཱིྦྷྪà¾áá©á´á¾arr;æ¤Gè»Â®ä®Æcnrà½à½à½ute;ä
g;æ«rÄ;tà½à½æ l;æ¤Æaeyཧཬཱron;ä
dil;ä
;ä Ä;vླྀཹæerseÄEUà¾à¾Älqà¾à¾ement;æuilibrium;æpEquilibrium;楯r»ཹo;ä¡ghtÐACDFTUVaà¿à¿«à¿³á¢á¨ááÏÄnrà¿à¿gleBracket;æ©rowÆ;BLà¿à¿à¿¡æar;æ¥eftArrow;æeiling;æoǵ࿹\0á
bleBracket;æ§nÇá\0áeeVector;æ¥ectorÄ;Bááæar;æ¥loor;æÄerááeÆ;AVáµá¶á¼æ¢rrow;æ¦ector;æ¥iangleÆ;BEáááæ³ar;æ§qual;æµpÆDTVá£á®á¸ownVector;æ¥eeVector;æ¥ectorÄ;Bááæ¾ar;æ¥ectorÄ;Bááæar;æ¥Äpuááf;ændImplies;楰ightarrow;æÄchá¹á¼r;æ;æ±leDelayed;æ§´ÚHOacfhimoqstuá¤á±á·á½ááá
á
á
¡á
§áµá»á¿ÄCcá©á®Hcy;ä©y;ä¨FTcy;ä¬cute;ä
Ê;aeiyáááááæª¼ron;ä
dil;ä
rc;ä
;ä¡r;ìðortÈDLRUáªá´á¾á
ownArrow»ÐeftArrow»à¢ightArrow»à¿pArrow;ægma;ä£allCircle;æpf;ìðɲá
\0\0á
°t;æareÈ;ISUá
ȇ
¼áá¯æ¡ntersection;æuÄbpáásetÄ;Eááæqual;æersetÄ;Eá¨á©æqual;ænion;æcr;ìð®ar;æÈbcmpááááÄ;sááæetÄ;Eááqual;æÄchá á
eedsÈ;ESTáá®á´á¿æ»qual;檰lantEqual;æ½ilde;æ¿Tháà¾;æÆ;esááá£ærsetÄ;Eááæqual;æet»áÖHRSacfhiorsá¾ááááá±á¶ááááORNè»ÃäADE;æ¢ÄHcáácy;äy;ä¦Äbuáá;ä;䤯aeyá¥áªá¯ron;ä
¤dil;ä
¢;ä¢r;ìðÄeiá»áDzá\0áefore;æ´a;äÄcnáákSpace;ìââSpace;ældeÈ;EFTá«á¬á²á¼æ¼qual;æullEqual;æ
ilde;æpf;ìðipleDot;æÄctáár;ìð¯rok;ä
¦à«¡á·ááá¦\0á¬á±\0\0\0\0\0á¸á½á·á
\0á¿áááÄcrá»áuteè»ÃärÄ;oááæcir;æ¥rÇ£á\0áy;äve;ä
¬Äiyáá£rcè»Ãä;ä£blac;ä
°r;ìðraveè»Ãäacr;ä
ªÄdiáá©erÄBPááÄaráár;äacÄekáá;æet;æµarenthesis;æonÄ;Pá°á±ælus;æÄgpá»á¿on;ä
²f;ìðÐADETadpsáá®á¸áϨááá³rrowÆ;BDá
á á¤ar;æ¤ownArrow;æ
ownArrow;æquilibrium;楮eeÄ;Aááæ¥rrow;æ¥ownáϳerÄLRáá¨eftArrow;æightArrow;æiÄ;lá¹áºäon;ä¥ing;ä
®cr;ìð°ilde;ä
¨mlè»ÃäÒDbcdefosvá§á¬á°á³á¾á
áááash;æ«ar;æ««y;äashÄ;lá»á¼æ©;櫦Äeráá
;æÆbtyáááºar;æÄ;iáácalÈBLSTá¡á¥áªá´ar;æ£ine;ä¼eparator;æilde;æThinSpace;ær;ìðpf;ìðcr;ìð±dash;æªÊcefosá§á¬á±á¶á¼irc;ä
´dge;ær;ìðpf;ìðcr;ìð²Èfiosáááár;ìð;äpf;ìðcr;ìð³ÒAIUacfosuá±áµá¹á½ááááá cy;ä¯cy;äcy;ä®cuteè»ÃäÄiyáárc;ä
¶;ä«r;ìðpf;ìðcr;ìð´ml;ä
¸ÐHacdefosáµá¹á¿áááá á¤cy;äcute;ä
¹Äayááron;ä
½;äot;ä
»Ç²á\0áoWidtèà«a;är;æ¨pf;æ¤cr;ìðµà¯¡ááá\0á°á¶á¿\0\0\0\0ááá«áá\0ááá²á¹\0á¾cuteè»Ã¡ä¡reve;äÌ;Ediuyááá¡á£á¨áæ¾;ìâ¾Ì³;æ¿rcè»Ã¢ä¢teè»Â´Ì;ä°ligè»Ã¦ä¦Ä;r²áº;ìðraveè»Ã ä ÄepááÄfpáásym;æµÃ¨áha;ä±ÄapácÄclá¤á§r;äg;樿ɤá°\0\0áÊ;adsváºá»á¿ááæ§nd;æ©;æ©lope;æ©;æ©Î;elmrszááááá¿ááæ ;榤e»ásdÄ;aá¥á¦æ¡Ñ¡á°á²á´á¶á¸áºá¼á¾;榨;榩;榪;榫;榬;æ¦;榮;榯tÄ;vá
áæbÄ;dááæ¾;æ¦Äptááh;æ¢Â»Â¹arr;æ¼Ägpá£á§on;ä
f;ìðÎ;Eaeiopáá»á½áááá;æ©°cir;橯;æd;æs;ä§roxÄ;eááñáingè»Ã¥ä¥Æctyá¡á¦á¨r;ìð¶;äªmpÄ;eáá¯Ã±Êildeè»Ã£ä£mlè»Ã¤ä¤Äciááoninôɲnt;æ¨à Nabcdefiklnoprsuáá±á°á¼ááá¸á½á á¦á ¹á¡á᤽á¥á¥°ot;æ«Äcrá¶ákÈcepsáá
ááong;æpsilon;ä¶rime;æµimÄ;eááæ½q;æÅ¶á¢á¦ee;æ½edÄ;gá¬áæ
e»árkÄ;táá·brk;æ¶Äoyáá;ä±quo;æÊcmprtááá¡á¤á¨ausÄ;eÄÄptyv;榰séánoÃµÄÆahwá¯á±á³;ä²;æ¶een;æ¬r;ìðgÎcostuvwááá³ááááÆaiuáááÃ°Ý rc;æ¯pÂ»á±Ædptá¤á¨áot;æ¨lus;æ¨imes;æ¨É±á¹\0\0á¾cup;æ¨ar;æ
riangleÄduááown;æ½p;æ³plus;æ¨eÃ¥áÃ¥áarow;æ¤Æakoáá ¦á µÄcná²á £kÆlstáºÖ«á ozenge;æ§«riangleÈ;dlrá á á á æ´own;æ¾eft;æight;æ¸k;æ£Æ±á «\0á ³Æ²á ¯\0á ±;æ;æ4;æck;æÄeoá ¾á¡Ä;qá¡á¡ì=â¥uiv;ìâ¡â¥t;æÈptwxá¡á¡á¡§á¡¬f;ìðÄ;táá¡£om»átie;æØDHUVbdhmptuvá¢
á¢á¢ªá¢»á£á£á£¬á£¿á¤
á¤á¤á¤¡ÈLRlrá¢á¢á¢á¢;æ;æ;æ;æÊ;DUduᢡᢢᢤᢦᢨæ;æ¦;æ©;æ¤;æ§ÈLRlrᢳᢵᢷᢹ;æ;æ;æ;æÎ;HLRhlrá£á£á£á£á£á£á£æ;æ¬;æ£;æ ;æ«;æ¢;æox;æ§ÈLRlrᣤᣦᣨᣪ;æ;æ;æ;æÊ;DUduڽ᣷᣹᣻᣽;æ¥;æ¨;æ¬;æ´inus;ælus;æimes;æ ÈLRlrá¤á¤á¤á¤;æ;æ;æ;æÎ;HLRhlrᤰᤱᤳᤵᤷ᤻᤹æ;æª;æ¡;æ;æ¼;æ¤;æÄevÄ£á¥barè»Â¦ä¦Èceioá¥á¥á¥á¥ r;ìð·mi;æmÄ;eáálÆ;bhᥨᥩᥫä;æ§
sub;æÅ¬á¥´á¥¾lÄ;e᥹᥺æ¢t»᥺pÆ;Eeįá¦
á¦;檮Ä;qÛÛೡᦧ\0᧨á¨á¨á¨²\0ᨷá©\0\0᪴\0\0á«\0\0ᬡᬮáá\0᯽\0á°Æcprá¦á¦²á§ute;äÌ;abcdsᦿá§á§á§á§á§æ©nd;æ©rcup;æ©Äauá§á§p;æ©p;æ©ot;æ©;ìâ©ï¸Äeo᧢᧥t;æÃ®ÚÈaeiuá§°á§»á¨á¨
ǰ᧵\0᧸s;æ©on;ädilè»Ã§ä§rc;äpsÄ;sá¨á¨æ©m;æ©ot;äÆdmná¨á¨ ᨦilè»Â¸Æptyv;榲tè¢;eá¨á¨®ä¢räƲr;ìð Æceiᨽá©á©y;äckÄ;má©á©æark»á©;ärÎ;Ecefmsá©á© ᩢᩫ᪤᪪᪮æ;æ§Æ;elᩩᩪá©äq;æeɡᩴ\0\0áªrrowÄlr᩼áªeft;æºight;æ»ÊRSacdáªáªáªáªáªÂ»à½;æst;æirc;æash;ænint;æ¨id;櫯cir;æ§ubsÄ;u᪻᪼æ£it»᪼ˬá«á«á«º\0á¬onÄ;eá«á«äºÄ;qÃÃÉá«\0\0á«¢aÄ;tá«á«ä¬;äÆ;fl᫨᫩᫫æÃ®á
eÄmx᫱᫶ent»᫩eóÉǧ᫾\0á¬Ä;dá»á¬ot;æ©nÃ´ÉÆfryá¬á¬á¬;ìðoäÉè©;sÅá¬r;æÄaoᬥᬩrr;æµss;æÄcuᬲᬷr;ìð¸ÄbpᬼáÄ;eááæ«;æ«Ä;eááæ«;æ«dot;æ¯Îdelprvwá á¬á·á®á®¬á¯á¯¹arrÄlrá¨áª;椸;椵ɰá²\0\0áµr;æc;æarrÄ;pá¿á®æ¶;椽Ì;bcdosá®á®á®á®¡á®¥á®¨æªrcap;æ©Äauá®á®p;æ©p;æ©ot;ær;æ©
;ìâªï¸Èalrv᮵ᮿá¯á¯£rrÄ;mᮼᮽæ·;椼yÆevwá¯á¯á¯qɰá¯\0\0á¯reãá³uãáµee;æedge;æenè»Â¤ä¤earrowÄlrᯮ᯳eft»á®ight»ᮽeäá¯Äciá°á°oninôǷnt;æ±lcty;æà¦AHabcdefhijlorstuwz᰸᰻᰿á±á±©á±µá²á²á²¬á²·á³»á³¿á´áµ»á¶á¶«á¶»á·á·ròÎar;楥Èglrsá±á±á±á±ger;æ eth;æ¸Ã²á³hÄ;vá±á±æÂ»à¤Å«á±¡á±§arow;æ¤aãÌÄayᱮᱳron;ä;ä´Æ;ao̲ᱼá²ÄgrÊ¿á²r;ætseq;æ©·Æglmá²á²á²è»Â°ä°ta;ä´ptyv;榱ÄirᲣᲨsht;楿;ìð¡arÄlrᲳᲵ»à£Â»áÊaegsvá³Í¸á³á³á³ mÆ;oșá³á³ndÄ;șá³uit;æ¦amma;äin;æ²Æ;io᳧᳨᳸ä·deè÷;oá³§á³°ntimes;ænø᳷cy;äcɯá´\0\0á´rn;æop;æÊlptuwá´á´á´¢áµáµlar;ä¤f;ìðÊ;empsÌá´á´·á´½áµqÄ;dÍá´³ot;æinus;æ¸lus;æquare;æ¡blebarwedgåúnÆadhá®áµáµ§ownarrowóá²arpoonÄlrᵲᵶefôᲴighôᲶŢᵿá¶
karo÷à½É¯á¶\0\0á¶rn;æop;æÆcotá¶á¶£á¶¦Äryá¶á¶¡;ìð¹;äl;æ§¶rok;äÄdrá¶°á¶´ot;æ±iÄ;fá¶ºá æ¿Äahá·á·ròЩaòྦangle;榦Äciá·á·y;ägrarr;æ¿à¤Dacdefglmnopqrstuxá¸á¸á¸á¸¸Õ¸á¸¼á¹á¹¡á¹¾áº¥áº¯áº½á»¡á¼ªá¼·á½á½á½ÄDoá¸á´´oôá²Äcsá¸á¸uteè»Ã©ä©ter;æ©®ÈaioyḢḧḱḶron;ärÄ;cá¸á¸®æè»Ãªäªlon;æ;äot;äÄDrá¹á¹
ot;æ;ìð¢Æ;rsá¹á¹á¹æªaveè»Ã¨ä¨Ä;dá¹á¹æªot;æªÈ;ilsṪṫṲṴæªnters;æ§;æÄ;dṹṺæªot;æªÆapsáº
áºáºcr;ätyÆ;sváºáºáºæ
et»áºpÄ1;áºáº¤Ä³áº¡áº£;æ;æ
æÄgsẪẬ;ä
p;æÄgpẴẸon;äf;ìðÆalsá»á»á»rÄ;sá»á»æl;æ§£us;橱iÆ;lvá»á»á»äµon»á»;äµÈcsuvỪỳá¼á¼£Äioữḱrc»Ḯɩỹ\0\0á»»ÃÕantÄglá¼á¼tr»á¹ess»ṺÆaeiá¼á¼á¼ls;ä½st;ævÄ;DȵἠD;橸parsl;æ§¥ÄDaἯἳot;ærr;楱Æcdiá¼¾á½á»¸r;æ¯oôÍÄahá½á½;ä·è»Ã°ä°Ämrá½á½lè»Ã«ä«o;æ¬Æcipὡὤὧl;ä¡sôծÄeoὬὴctatioîÕnentialåչৡá¾\0á¾\0ᾡᾧ\0\0á¿á¿\0á¿\0ῦῪâ\0ââllingdotseñá¹y;ämale;æÆilrá¾á¾³á¿lig;èï¬É©á¾¹\0\0á¾½g;èï¬ig;èï¬;ìð£lig;èï¬lig;ìfjÆaltá¿á¿á¿¡t;æig;èï¬ns;æ±of;äǰ΅\0ῳf;ìðÄakÖ¿á¿·Ä;vῼ´æ;æ«artint;æ¨ÄaoââÄcsââαââ°â¸â
â\0âβâ¢â¥â§âªâ¬\0â®è»Â½ä½;æ
è»Â¼ä¼;æ
;æ
;æ
Ƴâ´\0â¶;æ
;æ
Ê´â¾â\0\0âè»Â¾ä¾;æ
;æ
5;æ
ƶâ\0â;æ
;æ
8;æ
l;æwn;æ¢cr;ìð»à¢Eabcdefgijlnorstvââââ¥â°â´â°âµâºâ¿âââ¸Ìâ¾â
âÄ;lÙâ;æªÆcmpâââute;äµmaÄ;dâá³ä³;æªreve;äÄiyâªâ®rc;ä;ä³ot;ä¡È;lqsؾÙâ½âÆ;qsؾÙâlanô٥È;cdlÙ¥âââ¥c;檩otÄ;oââæªÄ;lâ¢â£æª;æªÄ;eâªâìâï¸s;æªr;ìð¤Ä;gÙ³Ømel;æ·cy;äÈ;EajÙâââ;æª;檥;檤ÈEaesâââ©â´;æ©pÄ;pâ£â¤æªrox»â¤Ä;qâ®â¯æªÄ;qâ®âim;æ§pf;ìðÄciâ
â
r;æmÆ;elÙ«â
â
;æª;æªè>;cdlqr×®â
â
ªâ
®â
³â
¹Äciâ
¥â
§;檧r;橺ot;æPar;æ¦uest;橼Êadelsââ
ªâÙâǰâ\0âproøâr;楸qÄlqØ¿âlesóâiÃÙ«Äenâ£ârtneqq;ìâ©ï¸Ã
âªÔAabcefkosyâââ±âµâºâââ¯â¨â½ròΠÈilmrâââârsðáf»â¤ilôکÄdrâ â¤cy;äÆ;cwࣴâ«â¯ir;æ¥;æar;æirc;䥯alrââârtsÄ;uââæ¥it»âlip;æ¦con;æ¹r;ìð¥sÄewâ£â©arow;椥arow;椦Êamoprâºâ¾âââ£rr;æ¿tht;æ»kÄlrââeftarrow;æ©ightarrow;æªf;ìðbar;æÆcltâ¯â´â¸r;ìð½asèâ´rok;ä§Äbpââull;æhen»á±à«¡â£\0âª\0â¸â
â\0ââ³\0\0â¸â¢â§â¢â¿\0ââªâ´cuteè»ÃäÆ;iyݱâ°âµrcè»Ã®ä®;ä¸Äcxâ¼â¿y;äµclè»Â¡ä¡ÄfrÎâ;ìð¦raveè»Ã¬ä¬È;inoܾââ©â®Äinâ¢â¦nt;æ¨t;æfin;æ§ta;æ©lig;䳯aopâ¾ââÆcgtâ
ââr;䫯elpÜââinÃ¥ÞarÃ´Ü h;ä±f;æ·ed;äµÊ;cfotÓ´â¬â±â½âare;æ
inÄ;tâ¸â¹æie;æ§doôâÊ;celpÝââââ¡al;æºÄgrââeróá£Ã£âarhk;æ¨rod;樼Ècgptâ¯â²â¶â»y;äon;ä¯f;ìða;ä¹uestè»Â¿ä¿Äciââr;ìð¾nÊ;EdsvÓ´âââ¡Ó³;æ¹ot;æµÄ;vâ¦â§æ´;æ³Ä;iÝ·â®lde;ä©Ç«â¸\0â¼cy;älè»Ã¯ä¯Ìcfmosuââââ¡â§âµÄiyâârc;äµ;ä¹r;ìð§ath;ä·pf;ìðÇ£â¬\0â±r;ìð¿rcy;äkcy;äÐacfghjosâââ¢â§ââ±âµâ»ppaÄ;vââäº;ä°Äeyââ dil;ä·;äºr;ìð¨reen;ä¸cy;ä
cy;äpf;ìðcr;ìðà®ABEHabcdefghjlmnoprstuvâ°ââââââ½âââââ¥â¹â½ââ²âââ¨âââ â Æartâ·âºâ¼ròà§Ã²Îail;æ¤arr;æ¤Ä;gà¦â;æªar;楢ॣâ¥\0âª\0â±\0\0\0\0\0âµâº\0âââ\0â¹ute;äºmptyv;榴raîà¡bda;ä»gÆ;dlà¢ââ;æ¦Ã¥à¢;æª
uoè»Â«ä«rÐ;bfhlpstà¢ââ¦â©â«â®â±âµÄ;fà¢â£s;æ¤s;æ¤Ã«âp;æ«l;椹im;楳l;æ¢Æ;aeâ¿ââæª«il;æ¤Ä;sââæª;ìâªï¸Æabrââârr;æ¤rk;æ²Äakâ¢â¬cÄekâ¨âª;ä»;äÄesâ±â³;æ¦lÄduâ¹â»;æ¦;æ¦Èaeuyââââron;ä¾Ädiââil;ä¼Ã¬à¢°Ã¢â©;
vendor: 4,294 bytes, line 9699
9699ä»Ècqrsâ£â¦ââ½a;椶uoÄ;rà¸áÄduâ²â·har;楧shar;æ¥h;æ²Ê;fgqsââà¦â³â¿æ¤tÊahlrtââ¤â·ââ¨rrowÄ;tà¢â¡aéâ¶arpoonÄduâ¯â´own»Ñp»०eftarrows;æightÆahsââârrowÄ;sࣴࢧarpoonóà¾quigarro÷â°hreetimes;æÆ;qsâà¦âºlanôবÊ;cdgsবââââ¨c;檨otÄ;oââæ©¿Ä;rââæª;æªÄ;eâ¢â¥ìâï¸s;æªÊadegsâ³â¹â½ââpproøâot;æqÄgqââ
ôà¦gtòâôà¦iÃলÆilrâ࣡âsht;楼;ìð©Ä;Eà¦â£;æªÅ¡â©â¶rÄduâ²â®Ä;l॥â³;楪lk;æcy;äÊ;achtà©ââââròâorneòá´ard;楫ri;æºÄioââ¤dot;ä
ustÄ;aâ¬âæ°che»âÈEaesâ»â½ââ;æ¨pÄ;pââæªrox»âÄ;qââæªÄ;qââ»im;æ¦Ðabnoptwzâ©â´â·ââ¯âââÄnrâ®â±g;æ¬r;æ½rëà£gÆlmrâ¿ââeftÄar০âightá৲apsto;æ¼ightá৽parrowÄlrâ¥â©efôâight;æ¬Æaflâ¶â¹â½r;æ¦
;ìðus;æ¨imes;樴šââst;æÃ¡áÆ;efââá ænge»âarÄ;lâ¤â¥ä¨t;æ¦Êachmtâ³â¶â¼â
âròࢨorneòá¶arÄ;dà¾â;æ¥;æri;æ¿Ìachiqtââà©â¢â®â»quo;æ¹r;ìðmÆ;egলâªâ¬;æª;æªÄbuâªâ³oÄ;rà¸â¹;ærok;ä
è<;cdhilqrà «ââ¹ââ â¥âªâ°Äciââ;檦r;橹reÃ¥â²mes;æarr;楶uest;æ©»ÄPiâµâ¹ar;æ¦Æ;efâ à¤á ærÄduâ â shar;æ¥har;楦Äenâ â ¡rtneqq;ìâ¨ï¸Ã
â ÜDacdefhilnopsuâ¡â¡
â¢â¢â¢â¢ ⢥⢨â£â£¢â£¤àªâ£³â¤Dot;æºÈclprâ¡â¡â¡£â¡½rè»Â¯ä¯Äetâ¡â¡;æÄ;eâ¡â¡æ se»â¡Ä;sá»â¡¨toÈ;dluá»â¡³â¡·â¡»owîÒefôà¤Ã°áker;æ®Äoyâ¢â¢mma;権;ä¼ash;æasuredangle»á¦r;ìðªo;æ§Æcdn⢯⢴â£roè»ÂµäµÈ;acdá¤â¢½â£â£sôá§ir;æ«°otè»Â·ÆµusÆ;bdâ£á¤â£æÄ;uá´¼â£;横ţâ£â£¡p;æ«Ã²âðàªÄdp⣩⣮els;æ§f;ìðÄct⣸⣽r;ìðpos»áÆ;lmâ¤â¤â¤ä¼timap;æ¸à°GLRVabcdefghijlmoprstuvwâ¥â¥â¥¾â¦â¦â§â§©â¨â¨â©â©âªâªâª¤âª¨â¬â¬ââ¿â®®â°´â±§â±¼â³©Ägtâ¥â¥;ìâ̸Ä;vâ¥à¯ìâ«âÆeltâ¥â¥²â¥¶ftÄar⥡⥧rrow;æightarrow;æ;ìâ̸Ä;v⥻à±ìâªâightarrow;æÄDdâ¦â¦ash;æ¯ash;æ®Êbcnpt⦣⦧⦬⦱â§la»Ëute;ä
g;ìâ âÊ;Eiopà¶â¦¼â§â§
â§;ì⩰̸d;ìâ̸s;ä
roøà¶urÄ;aâ§â§æ®lÄ;sâ§à¬¸Ç³â§\0â§£pè»Â ଷmpÄ;e௹à°Êaeouyâ§´â§¾â¨â¨â¨Ç°â§¹\0â§»;æ©on;ä
dil;ä
ngÄ;dൾâ¨ot;ìâ©Ì¸p;æ©;ä½ash;æÎ;Aadqsxà®â¨©â¨â¨»â©â©
â©rr;ærÄhr⨳⨶k;椤Ä;oá²á°ot;ìâ̸uiöà£Äeiâ©â©ar;椨Ãà®istÄ;sà® à®r;ìð«ÈEestà¯
⩦⩹⩼Æ;qs஼â©à¯¡Æ;qs஼à¯
â©´lanô௢iÃ௪Ä;rà®¶âªÂ»à®·ÆAapâªâªâªrò⥱rr;æ®ar;櫲Æ;svà¾âªà¾Ä;d⪡⪢æ¼;æºcy;äÎAEadest⪷⪺⪾â«â«
⫶⫹rò⥦;ìâ¦Ì¸rr;ær;æ¥È;fqsà°»â«â«£â«¯tÄarâ«â«rro÷â«ightarroÃ·âªÆ;qs఻⪺⫪lanôà±Ä;sà±â«´Â»à°¶iÃà±Ä;rవ⫾iÄ;eà°à°¥iäà¶Äptâ¬â¬f;ìðè¬;inâ¬â¬â¬¶ä¬nÈ;Edvà®â¬¤â¬¨â¬®;ìâ¹Ì¸ot;ìâµÌ¸Ç¡à®â¬³â¬µ;æ·;æ¶iÄ;vಸ⬼ǡಸââ;æ¾;æ½Æaorââ£â©rÈ;astà»âââlleìà»l;ì⫽â¥;ìâ̸lint;æ¨Æ;ceà²â°â³uåಥÄ;cà²â¸Ä;eà²â½Ã±à²ÈAaitâ®â®â®â®§ròâ¦rrÆ;cwâ®â®â®æ;ì⤳̸;ìâ̸ghtarrow»â®riÄ;eà³à³Îchimpqu⮽â¯â¯â¬à¸â¯¤â¯¯È;cerà´²â¯à´·â¯uÃ¥àµ
;ìðortÉâ¬
\0\0â¯aráâmÄ;e൮â¯Ä;q൴൳suÄbp⯫â¯Ã¥à³¸Ã¥à´Æbcp⯶â°â°È;Ees⯿â°à´¢â°æ;ìâ«
̸etÄ;eà´â°qÄ;qà´£â°cÄ;eà´²â°Ã±à´¸È;EesⰢⰣàµâ°§æ
;ìâ«Ì¸etÄ;eàµâ°®qÄ;qൠⰣÈgilrⰽⰿâ±
â±Ã¬à¯ldeè»Ã±ä±Ã§à±iangleÄlrâ±â±eftÄ;eà°â±Ã±à°¦ightÄ;eà³â±¥Ã±à³Ä;mⱬâ±ä½Æ;esⱴⱵⱹä£ro;æp;æÒDHadgilrsâ²â²â²â²â²£â²°â²¶â³â³£ash;æarr;æ¤p;ìââash;æ¬ÄetⲨⲬ;ìâ¥â;ì>ânfin;æ§ÆAetâ²½â³â³
rr;æ¤;ìâ¤âÄ;râ³â³ì<âie;ìâ´âÄAtâ³â³rr;æ¤rie;ìâµâim;ìâ¼âÆAanâ³°â³´â´rr;ærÄhr⳺⳽k;椣Ä;oá§á¥ear;椧ááª\0\0\0\0\0\0\0\0\0\0\0\0\0â´\0â´¸âµâµ ⵥ⵲â¶á¬\0\0â¶â¶«\0â·â·\0â·â¸â¸«â¸¾â¹Äcsâ´±áªuteè»Ã³ä³Äiyâ´¼âµ
rÄ;cáªâµè»Ã´ä´;ä¾Êabios᪠âµâµÇâµlac;ä
v;樸old;榼lig;ä
Äcr⵩âµir;榿;ìð¬Í¯âµ¹\0\0âµ¼\0â¶n;äaveè»Ã²ä²;æ§Äbmâ¶à·´ar;榵Èacitâ¶â¶â¶¥â¶¨ròáªÄirâ¶â¶ r;榾oss;榻nÃ¥à¹;æ§Æaeiⶱⶵⶹcr;ä
ga;äÆcdnâ·â·
Çron;ä¿;榶pf;ìð Æaelâ·â·Çr;榷rp;榹Î;adiosvⷪⷫⷮâ¸â¸â¸â¸æ¨ròáªÈ;efmâ··â·¸â¸â¸
æ©rÄ;oⷾⷿæ´f»ⷿè»Âªäªè»Âºäºgof;æ¶r;æ©lope;æ©;æ©Æcloâ¸â¸¡â¸§Ã²â¸ashè»Ã¸ä¸l;æiŬⸯ⸴deè»ÃµäµesÄ;aÇ⸺s;樶mlè»Ã¶ä¶bar;æ½à«¡â¹\0â¹½\0âºâº\0⺢⺹\0\0â»àº\0â¼\0\0⼫⾼\0â¿rÈ;
vendor: 6,210 bytes, line 9699
9699astÐâ¹§â¹²àº
è¶;lâ¹â¹®ä¶leìÐɩ⹸\0\0â¹»m;櫳;櫽y;ä¿rÊcimptâºâºâºá¡¥âºnt;ä¥od;ä®il;æ°enk;æ±r;ìðÆimo⺨⺰⺴Ä;vâºâº®ä;ämaô੶ne;æÆ;tv⺿â»â»ächfork»´;äÄauâ»â»nÄckâ»â»kÄ;hâ´â»;æÃ¶â´sÒ;abcdemst⻳⻴á¤â»¹â»½â¼â¼â¼â¼ä«cir;樣ir;樢Äouáµâ¼;樥;橲nè»Â±àºim;樦wo;樧Æipuâ¼â¼ â¼¥ntint;æ¨f;ìð¡ndè»Â£ä£Ô;Eaceinosuà»â¼¿â½â½â½â¾â¾â¾â½¾â¾¶;檳p;檷uÃ¥à»Ä;cà»â½Ì;acensà»â½â½â½¦â½¨â½¾pproøâ½urlyeñà»Ã±à»Æaes⽯⽶⽺pprox;檹qq;檵im;æ¨iÃà»meÄ;sâ¾àº®æ²ÆEas⽸â¾â½ºÃ°â½µÆdfp໬â¾â¾¯Æals⾠⾥⾪lar;æ®ine;æurf;æÄ;t໻⾴ï໻rel;æ°Äciâ¿â¿
r;ìð
;äncsp;æÌfiopsuâ¿â¢â¿â¿¥â¿«â¿±r;ìð®pf;ìð¢rime;æcr;ìðÆaeo⿸ããtÄei⿾ã
rnionóڰnt;æ¨stÄ;eããä¿Ã±á¼Ã´à¼àªABHabcdefhilmnoprstuxããããã ãã«ã
ã
¢ã
²ãããã¤ã©ãã®ã²ãã°ã·Æartãããròá³Ã²Ïail;æ¤aròᱥar;楤Îcdenqrtã¨ãµã¸ã¿ãããÄeuãã±;ìâ½Ì±te;ä
iãá
®mptyv;榳gÈ;delà¿ããã;æ¦;榥åà¿uoè»Â»ä»rÖ;abcfhlpstwà¿ã¬ã¯ã·ã¹ã¼ã¾ããããp;極Ä;fà¿ ã´s;æ¤ ;椳s;æ¤Ã«âðâ®l;æ¥
im;楴l;æ£;æÄaiããil;æ¤oÄ;nããæ¶alÃ³à¼Æabrã§ãªã®ròá¥rk;æ³Äakã³ã½cÄekã¹ã»;ä½;äÄesãã;æ¦lÄduãã;æ¦;æ¦Èaeuyããã§ã©ron;ä
Ädiã¡ã¥il;ä
ì࿲âãº;äÈclqsã´ã·ã½ã
a;椷dhar;楩uoÄ;rÈÈh;æ³Æacgã
ã
à½lÈ;ipsླྀã
ã
ánÃ¥á»arôྩt;æÆilrã
©á£ã
®sht;楽;ìð¯Äaoã
·ãrÄduã
½ã
¿Â»Ñ»Ä;láã;楬Ä;vããä;䱯gnsãã¹ã¼htÌahlrstã¤ã°ããã¤ã®rrowÄ;tà¿ãaéãarpoonÄduã»ã¿owîã
¾p»áeftÄahããrrowó࿪arpoonóÕightarrows;æquigarro÷ãhreetimes;æg;äingdotseñἲÆahmãããrò࿪aòÕ;æoustÄ;aããæ±che»ãmid;æ«®Èabptã²ã½ããÄnrã·ãºg;ær;æ¾rëáÆaflãããr;æ¦;ìð£us;樮imes;樵Äapãã§rÄ;gã£ã¤ä©t;æ¦olint;æ¨aròã£Èachqã»ãá¼ã
quo;æºr;ìðÄbuã»ãoÄ;rÈÈÆhirããã reÃ¥ã¸mes;æiÈ;eflãªáá ¡ã«æ¹tri;æ§luhar;楨;æàµ¡ãããã¬ã¸ã±\0ãºã¤\0\0ã¬ã°\0ã¨ãããã±ãã±\0ã\0\0ã³cute;ä
quïâºÔ;Eaceinpsyáã³ãµã¿ããããã¦ã©;檴ǰãº\0ã¼;檸on;ä
¡uÃ¥á¾Ä;dá³ãil;ä
rc;ä
ÆEasããã;檶p;檺im;æ©olint;æ¨iÃá;äotÆ;beã´áµãµæ
;橦ÎAacmstxãããããã£ãrr;ærÄhrããëâ¨Ä;oਸ਼਴tè»Â§ä§i;ä»war;椩mÄinã©Ã°nuóñt;æ¶rÄ;oã¶âìð°Èacoyãããã rp;æ¯Ähyããcy;ä;ärtÉã\0\0ãiäá¤araì⹯è»ÂäÄgmã¨ã´maÆ;fvã±ã²ã²ä;äÐ;deglnprá«ã
ããããã¡ã¦ot;橪Ä;qá±á°Ä;Eããæª;æª Ä;Eããæª;æªe;ælus;樤arr;楲aròá½Èaeitã¸ãããÄlsã½ãlsetméãªhp;樳parsl;槤Ädlá£ãe;æ£Ä;eããæªªÄ;sã¢ã£æª¬;ìâª¬ï¸Æflpã®ã³ãtcy;äÄ;bã¸ã¹ä¯Ä;aã¾ã¿æ§r;æ¿f;ìð¤aÄdrãÐesÄ;uããæ it»ãÆcsuã ã¹ãÄauã¥ã¯pÄ;sáã«;ìâï¸pÄ;sá´ãµ;ìâï¸uÄbpã¿ãÆ;esááãetÄ;eáãñáÆ;esá¨áãetÄ;eá¨ãÃ±á®Æ;afá
»ã¦Ö°rÅ¥ã«Ö±Â»á
¼aròá
Ècemtã¹ã¾ãã
r;ìðtmîñiìãaræá¾ÄarããrÄ;fãá¿æÄanããightÄepã£ãªpsiloîỠhé⺯s»â¡Êbcmnpã»ãáããÒ;Edemnprsãããããã£ã¬ã±ã¶æ;æ«
ot;檽Ä;dáãot;æ«ult;æ«ÄEeã¨ãª;æ«;ælus;檿arr;楹Æeiuã½ããtÆ;enãã
ãqÄ;qáãeqÄ;qã«ã¨m;æ«Äbpãã;æ«;æ«cÌ;acensáã¬ã²ã¹ã»ã¦pproøãºurlyeñá¾Ã±á³Æaesãããpproøãqñãg;æªÚ123;Edehlmnpsã©ã¬ã¯áã²ã´ãããããã¨ãè»Â¹ä¹è»Â²ä²è»Â³ä³;æ«Äosã¹ã¼t;檾ub;æ«Ä;dá¢ã
ot;æ«sÄouããl;æb;æ«arr;楻ult;æ«ÄEeã¤ã¦;æ«;ælus;æ«Æeiuã´ããtÆ;enáã¼ãqÄ;qá¢ã²eqÄ;qã§ã¤m;æ«Äbpãã;æ«;æ«ÆAanãã ãrr;ærÄhrã¦ã¨Ã«â®Ä;oਫ਩war;椪ligè»Ãä௡ããã áã³ã¹\0ã¾ã\0\0\0\0\0ãã\0ãã¬\0\0\0ãɲã\0\0ãget;æ;ärÃ«à¹Æaeyã¦ã«ã°ron;ä
¥dil;ä
£;älrec;ær;ìð±Èeikoãããµã¼Ç²ã\0ãeÄ4fááaÆ;svãããä¸ym;äÄcnã¢ã²kÄasã¨ã®pproøáim»á¬sðáÄasãºã®Ã°árnè»Ã¾ä¾Ç¬Ìãâ§esèÃ;bdãããäÄ;aá¤ãr;樱;樰Æepsã¡ã£ãáâ©È;bcfÒã¬ã°ã´ot;æ¶ir;櫱Ä;oã¹ã¼ìð¥rk;æ«Ã¡ã¢rime;æ´Æaipããã¤dÃ¥áÎadempstã¡ããããããngleÊ;dlqrã°ã±ã¶ããæµown»ᶻeftÄ;eâ ã¾Ã±à¤®;æightÄ;eãªãñáot;æ¬inus;樺lus;樹b;æ§ime;樻ezium;æ¢Æchtã²ã½ãÄryã·ã»;ìð;äcy;ärok;ä
§Äioããxôá·headÄlrãã eftarro÷à¡ightarrow»à½à¤AHabcdfghlmoprstuwãããã¤ã°ã¼ã ã 㠣㠴ã¡ã¡ã¡«ã¢©ã£ã£ã£ªã£¶ròÏar;楣Äcrãã¢uteè»ÃºäºÃ²á
rÇ£ãª\0ãy;äve;ä
Äiyãµãºrcè»Ã»ä»;äÆabhã ã ã ròálac;ä
±aòáÄirã ã sht;楾;ìð²raveè»Ã¹ä¹Å¡ã §ã ±rÄlr㠬㠮»à¥Â»álk;æÄctã ¹ã¡É¯ã ¿\0\0ã¡rnÄ;eã¡
ã¡ær»ã¡op;æri;æ¸Äalã¡ã¡cr;ä
«è»Â¨ÍÄgp㡢㡦on;ä
³f;ìð¦Ìadhlsuá
㡸㡽á²ã¢ã¢ ownáá³arpoonÄlrã¢ã¢efôã ighô㠯iÆ;hlã¢ã¢ã¢ä
»áºon»ã¢parrows;æÆcit㢰ã£ã£É¯ã¢¶\0\0ã£rnÄ;e㢼㢽ær»㢽op;æng;ä
¯ri;æ¹cr;ìðÆdirã£ã£ã£¢ot;æ°lde;ä
©iÄ;fã°ã£¨Â»á Äam㣯㣲rò㢨lè»Ã¼ä¼angle;榧ÞABDacdeflnoprszã¤ã¤ã¤©ã¤ã¦µã¦¸ã¦½ã§ã§¤ã§¨ã§³ã§¹ã§½ã¨ã¨ ròϷarÄ;v㤦㤧櫨;æ«©asèϡÄnr㤲㤷grt;æ¦Îeknprstã£ã¥ã¥ã¥ã¥ã¥¤ã¦appáâothinÃ§áºÆhirã«â»ã¥opô⾵Ä;há·ã¥¢Ã¯ãÄiu㥩ã¥gmáã³Äbp㥲ã¦setneqÄ;q㥽ã¦ìâï¸;ìâ«ï¸setneqÄ;qã¦ã¦ìâï¸;ìâ«ï¸Ährã¦ã¦etáãiangleÄlr㦪㦯eft»थight»áy;ä²ashÂ»á¶Æelrã§ã§ã§Æ;beâ·ªã§ã§ar;æ»q;ælip;æ®Äbtã§á¨aòá©r;ìð³tré㦮suÄbp㧯㧱»à´Â»àµpf;ìð§roð໻tré㦴Äcuã¨ã¨r;ìðÄbpã¨ã¨nÄEeã¦ã¨Â»ã¥¾nÄEeã¦ã¨Â»ã¦igzag;æ¦Îcefoprs㨶㨻ã©ã©ã©ã©¡ã©ªirc;ä
µÄdiã©ã©Äbgã©
ã©ar;æ©eÄ;qáºã©;æerp;ær;ìð´pf;ìð¨Ä;eá¹ã©¦atèá¹cr;ìðà«£áãª\0ãª\0ãªãª\0\0ãªãª¨ãª«ãª¯\0\0ã«ã«\0ã«áátréár;ìðµÄAaãªãªròÏrò৶;ä¾ÄAa㪡㪤ròθrò৫aðâis;æ»Ædptá¤ãªµãª¾Äfl㪺á©;ìð©imÃ¥á²ÄAaã«ã«ròÏròà¨Äcqã«á¸r;ìðÄptáã«réáÐacefiosu㫰㫽ã¬ã¬ã¬ã¬ã¬ã¬¡cÄuyã«¶ã«»teè»Ã½ä½;äÄiyã¬ã¬rc;ä
·;änè»Â¥ä¥r;ìð¶cy;äpf;ìðªcr;ìðÄcm㬦㬩y;älè»Ã¿ä¿Ôacdefhioswããããã¤ã©ãã´ãºã®cute;ä
ºÄayããron;ä
¾;ä·ot;ä
¼Äetãã¡træáa;ä¶r;ìð·cy;ä¶grarr;æpf;ìð«cr;ìðÄjnã®
ã®;æj;æ
9699'.split("").map(e=>e.charCodeAt(0))),qR=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);function BR(e){var t;return e>=55296&&e<=57343||e>1114111?65533:(t=qR.get(e))!==null&&t!==void 0?t:e}var Qe;(function(e){e[e.NUM=35]="NUM",e[e.SEMI=59]="SEMI",e[e.EQUALS=61]="EQUALS",e[e.ZERO=48]="ZERO",e[e.NINE=57]="NINE",e[e.LOWER_A=97]="LOWER_A",e[e.LOWER_F=102]="LOWER_F",e[e.LOWER_X=120]="LOWER_X",e[e.LOWER_Z=122]="LOWER_Z",e[e.UPPER_A=65]="UPPER_A",e[e.UPPER_F=70]="UPPER_F",e[e.UPPER_Z=90]="UPPER_Z"})(Qe||(Qe={}));const FR=32;var ba;(function(e){e[e.VALUE_LENGTH=49152]="VALUE_LENGTH",e[e.BRANCH_LENGTH=16256]="BRANCH_LENGTH",e[e.JUMP_TABLE=127]="JUMP_TABLE"})(ba||(ba={}));function pp(e){return e>=Qe.ZERO&&e<=Qe.NINE}function HR(e){return e>=Qe.UPPER_A&&e<=Qe.UPPER_F||e>=Qe.LOWER_A&&e<=Qe.LOWER_F}function UR(e){return e>=Qe.UPPER_A&&e<=Qe.UPPER_Z||e>=Qe.LOWER_A&&e<=Qe.LOWER_Z||pp(e)}function VR(e){return e===Qe.EQUALS||UR(e)}var Ye;(function(e){e[e.EntityStart=0]="EntityStart",e[e.NumericStart=1]="NumericStart",e[e.NumericDecimal=2]="NumericDecimal",e[e.NumericHex=3]="NumericHex",e[e.NamedEntity=4]="NamedEntity"})(Ye||(Ye={}));var Vn;(function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute"})(Vn||(Vn={}));class WR{constructor(t,n,a){this.decodeTree=t,this.emitCodePoint=n,this.errors=a,this.state=Ye.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=Vn.Strict}startEntity(t){this.decodeMode=t,this.state=Ye.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1}write(t,n){switch(this.state){case Ye.EntityStart:return t.charCodeAt(n)===Qe.NUM?(this.state=Ye.NumericStart,this.consumed+=1,this.stateNumericStart(t,n+1)):(this.state=Ye.NamedEntity,this.stateNamedEntity(t,n));case Ye.NumericStart:return this.stateNumericStart(t,n);case Ye.NumericDecimal:return this.stateNumericDecimal(t,n);case Ye.NumericHex:return this.stateNumericHex(t,n);case Ye.NamedEntity:return this.stateNamedEntity(t,n)}}stateNumericStart(t,n){return n>=t.length?-1:(t.charCodeAt(n)|FR)===Qe.LOWER_X?(this.state=Ye.NumericHex,this.consumed+=1,this.stateNumericHex(t,n+1)):(this.state=Ye.NumericDecimal,this.stateNumericDecimal(t,n))}addToNumericResult(t,n,a,r){if(n!==a){const s=a-n;this.result=this.result*Math.pow(r,s)+Number.parseInt(t.substr(n,s),r),this.consumed+=s}}stateNumericHex(t,n){const a=n;for(;n<t.length;){const r=t.charCodeAt(n);if(pp(r)||HR(r))n+=1;else return this.addToNumericResult(t,a,n,16),this.emitNumericEntity(r,3)}return this.addToNumericResult(t,a,n,16),-1}stateNumericDecimal(t,n){const a=n;for(;n<t.length;){const r=t.charCodeAt(n);if(pp(r))n+=1;else return this.addToNumericResult(t,a,n,10),this.emitNumericEntity(r,2)}return this.addToNumericResult(t,a,n,10),-1}emitNumericEntity(t,n){var a;if(this.consumed<=n)return(a=this.errors)===null||a===void 0||a.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(t===Qe.SEMI)this.consumed+=1;else if(this.decodeMode===Vn.Strict)return 0;return this.emitCodePoint(BR(this.result),this.consumed),this.errors&&(t!==Qe.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed}stateNamedEntity(t,n){const{decodeTree:a}=this;let r=a[this.treeIndex],s=(r&ba.VALUE_LENGTH)>>14;for(;n<t.length;n++,this.excess++){const o=t.charCodeAt(n);if(this.treeIndex=$R(a,r,this.treeIndex+Math.max(1,s),o),this.treeIndex<0)return this.result===0||this.decodeMode===Vn.Attribute&&(s===0||VR(o))?0:this.emitNotTerminatedNamedEntity();if(r=a[this.treeIndex],s=(r&ba.VALUE_LENGTH)>>14,s!==0){if(o===Qe.SEMI)return this.emitNamedEntityData(this.treeIndex,s,this.consumed+this.excess);this.decodeMode!==Vn.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}return-1}emitNotTerminatedNamedEntity(){var t;const{result:n,decodeTree:a}=this,r=(a[n]&ba.VALUE_LENGTH)>>14;return this.emitNamedEntityData(n,r,this.consumed),(t=this.errors)===null||t===void 0||t.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(t,n,a){const{decodeTree:r}=this;return this.emitCodePoint(n===1?r[t]&~ba.VALUE_LENGTH:r[t+1],a),n===3&&this.emitCodePoint(r[t+2],a),a}end(){var t;switch(this.state){case Ye.NamedEntity:return this.result!==0&&(this.decodeMode!==Vn.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case Ye.NumericDecimal:return this.emitNumericEntity(0,2);case Ye.NumericHex:return this.emitNumericEntity(0,3);case Ye.NumericStart:return(t=this.errors)===null||t===void 0||t.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case Ye.EntityStart:return 0}}}function $R(e,t,n,a){const r=(t&ba.BRANCH_LENGTH)>>7,s=t&ba.JUMP_TABLE;if(r===0)return s!==0&&a===s?n:-1;if(s){const c=a-s;return c<0||c>=r?-1:e[n+c]-1}let o=n,l=o+r-1;for(;o<=l;){const c=o+l>>>1,u=e[c];if(u<a)o=c+1;else if(u>a)l=c-1;else return e[c+r]}return-1}var W;(function(e){e.HTML="http://www.w3.org/1999/xhtml",e.MATHML="http://www.w3.org/1998/Math/MathML",e.SVG="http://www.w3.org/2000/svg",e.XLINK="http://www.w3.org/1999/xlink",e.XML="http://www.w3.org/XML/1998/namespace",e.XMLNS="http://www.w3.org/2000/xmlns/"})(W||(W={}));var ci;(function(e){e.TYPE="type",e.ACTION="action",e.ENCODING="encoding",e.PROMPT="prompt",e.NAME="name",e.COLOR="color",e.FACE="face",e.SIZE="size"})(ci||(ci={}));var $t;(function(e){e.NO_QUIRKS="no-quirks",e.QUIRKS="quirks",e.LIMITED_QUIRKS="limited-quirks"})($t||($t={}));var _;(function(e){e.A="a",e.ADDRESS="address",e.ANNOTATION_XML="annotation-xml",e.APPLET="applet",e.AREA="area",e.ARTICLE="article",e.ASIDE="aside",e.B="b",e.BASE="base",e.BASEFONT="basefont",e.BGSOUND="bgsound",e.BIG="big",e.BLOCKQUOTE="blockquote",e.BODY="body",e.BR="br",e.BUTTON="button",e.CAPTION="caption",e.CENTER="center",e.CODE="code",e.COL="col",e.COLGROUP="colgroup",e.DD="dd",e.DESC="desc",e.DETAILS="details",e.DIALOG="dialog",e.DIR="dir",e.DIV="div",e.DL="dl",e.DT="dt",e.EM="em",e.EMBED="embed",e.FIELDSET="fieldset",e.FIGCAPTION="figcaption",e.FIGURE="figure",e.FONT="font",e.FOOTER="footer",e.FOREIGN_OBJECT="foreignObject",e.FORM="form",e.FRAME="frame",e.FRAMESET="frameset",e.H1="h1",e.H2="h2",e.H3="h3",e.H4="h4",e.H5="h5",e.H6="h6",e.HEAD="head",e.HEADER="header",e.HGROUP="hgroup",e.HR="hr",e.HTML="html",e.I="i",e.IMG="img",e.IMAGE="image",e.INPUT="input",e.IFRAME="iframe",e.KEYGEN="keygen",e.LABEL="label",e.LI="li",e.LINK="link",e.LISTING="listing",e.MAIN="main",e.MALIGNMARK="malignmark",e.MARQUEE="marquee",e.MATH="math",e.MENU="menu",e.META="meta",e.MGLYPH="mglyph",e.MI="mi",e.MO="mo",e.MN="mn",e.MS="ms",e.MTEXT="mtext",e.NAV="nav",e.NOBR="nobr",e.NOFRAMES="noframes",e.NOEMBED="noembed",e.NOSCRIPT="noscript",e.OBJECT="object",e.OL="ol",e.OPTGROUP="optgroup",e.OPTION="option",e.P="p",e.PARAM="param",e.PLAINTEXT="plaintext",e.PRE="pre",e.RB="rb",e.RP="rp",e.RT="rt",e.RTC="rtc",e.RUBY="ruby",e.S="s",e.SCRIPT="script",e.SEARCH="search",e.SECTION="section",e.SELECT="select",e.SOURCE="source",e.SMALL="small",e.SPAN="span",e.STRIKE="str
9699ike",e.STRONG="strong",e.STYLE="style",e.SUB="sub",e.SUMMARY="summary",e.SUP="sup",e.TABLE="table",e.TBODY="tbody",e.TEMPLATE="template",e.TEXTAREA="textarea",e.TFOOT="tfoot",e.TD="td",e.TH="th",e.THEAD="thead",e.TITLE="title",e.TR="tr",e.TRACK="track",e.TT="tt",e.U="u",e.UL="ul",e.SVG="svg",e.VAR="var",e.WBR="wbr",e.XMP="xmp"})(_||(_={}));var h;(function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.A=1]="A",e[e.ADDRESS=2]="ADDRESS",e[e.ANNOTATION_XML=3]="ANNOTATION_XML",e[e.APPLET=4]="APPLET",e[e.AREA=5]="AREA",e[e.ARTICLE=6]="ARTICLE",e[e.ASIDE=7]="ASIDE",e[e.B=8]="B",e[e.BASE=9]="BASE",e[e.BASEFONT=10]="BASEFONT",e[e.BGSOUND=11]="BGSOUND",e[e.BIG=12]="BIG",e[e.BLOCKQUOTE=13]="BLOCKQUOTE",e[e.BODY=14]="BODY",e[e.BR=15]="BR",e[e.BUTTON=16]="BUTTON",e[e.CAPTION=17]="CAPTION",e[e.CENTER=18]="CENTER",e[e.CODE=19]="CODE",e[e.COL=20]="COL",e[e.COLGROUP=21]="COLGROUP",e[e.DD=22]="DD",e[e.DESC=23]="DESC",e[e.DETAILS=24]="DETAILS",e[e.DIALOG=25]="DIALOG",e[e.DIR=26]="DIR",e[e.DIV=27]="DIV",e[e.DL=28]="DL",e[e.DT=29]="DT",e[e.EM=30]="EM",e[e.EMBED=31]="EMBED",e[e.FIELDSET=32]="FIELDSET",e[e.FIGCAPTION=33]="FIGCAPTION",e[e.FIGURE=34]="FIGURE",e[e.FONT=35]="FONT",e[e.FOOTER=36]="FOOTER",e[e.FOREIGN_OBJECT=37]="FOREIGN_OBJECT",e[e.FORM=38]="FORM",e[e.FRAME=39]="FRAME",e[e.FRAMESET=40]="FRAMESET",e[e.H1=41]="H1",e[e.H2=42]="H2",e[e.H3=43]="H3",e[e.H4=44]="H4",e[e.H5=45]="H5",e[e.H6=46]="H6",e[e.HEAD=47]="HEAD",e[e.HEADER=48]="HEADER",e[e.HGROUP=49]="HGROUP",e[e.HR=50]="HR",e[e.HTML=51]="HTML",e[e.I=52]="I",e[e.IMG=53]="IMG",e[e.IMAGE=54]="IMAGE",e[e.INPUT=55]="INPUT",e[e.IFRAME=56]="IFRAME",e[e.KEYGEN=57]="KEYGEN",e[e.LABEL=58]="LABEL",e[e.LI=59]="LI",e[e.LINK=60]="LINK",e[e.LISTING=61]="LISTING",e[e.MAIN=62]="MAIN",e[e.MALIGNMARK=63]="MALIGNMARK",e[e.MARQUEE=64]="MARQUEE",e[e.MATH=65]="MATH",e[e.MENU=66]="MENU",e[e.META=67]="META",e[e.MGLYPH=68]="MGLYPH",e[e.MI=69]="MI",e[e.MO=70]="MO",e[e.MN=71]="MN",e[e.MS=72]="MS",e[e.MTEXT=73]="MTEXT",e[e.NAV=74]="NAV",e[e.NOBR=75]="NOBR",e[e.NOFRAMES=76]="NOFRAMES",e[e.NOEMBED=77]="NOEMBED",e[e.NOSCRIPT=78]="NOSCRIPT",e[e.OBJECT=79]="OBJECT",e[e.OL=80]="OL",e[e.OPTGROUP=81]="OPTGROUP",e[e.OPTION=82]="OPTION",e[e.P=83]="P",e[e.PARAM=84]="PARAM",e[e.PLAINTEXT=85]="PLAINTEXT",e[e.PRE=86]="PRE",e[e.RB=87]="RB",e[e.RP=88]="RP",e[e.RT=89]="RT",e[e.RTC=90]="RTC",e[e.RUBY=91]="RUBY",e[e.S=92]="S",e[e.SCRIPT=93]="SCRIPT",e[e.SEARCH=94]="SEARCH",e[e.SECTION=95]="SECTION",e[e.SELECT=96]="SELECT",e[e.SOURCE=97]="SOURCE",e[e.SMALL=98]="SMALL",e[e.SPAN=99]="SPAN",e[e.STRIKE=100]="STRIKE",e[e.STRONG=101]="STRONG",e[e.STYLE=102]="STYLE",e[e.SUB=103]="SUB",e[e.SUMMARY=104]="SUMMARY",e[e.SUP=105]="SUP",e[e.TABLE=106]="TABLE",e[e.TBODY=107]="TBODY",e[e.TEMPLATE=108]="TEMPLATE",e[e.TEXTAREA=109]="TEXTAREA",e[e.TFOOT=110]="TFOOT",e[e.TD=111]="TD",e[e.TH=112]="TH",e[e.THEAD=113]="THEAD",e[e.TITLE=114]="TITLE",e[e.TR=115]="TR",e[e.TRACK=116]="TRACK",e[e.TT=117]="TT",e[e.U=118]="U",e[e.UL=119]="UL",e[e.SVG=120]="SVG",e[e.VAR=121]="VAR",e[e.WBR=122]="WBR",e[e.XMP=123]="XMP"})(h||(h={}));const YR=new Map([[_.A,h.A],[_.ADDRESS,h.ADDRESS],[_.ANNOTATION_XML,h.ANNOTATION_XML],[_.APPLET,h.APPLET],[_.AREA,h.AREA],[_.ARTICLE,h.ARTICLE],[_.ASIDE,h.ASIDE],[_.B,h.B],[_.BASE,h.BASE],[_.BASEFONT,h.BASEFONT],[_.BGSOUND,h.BGSOUND],[_.BIG,h.BIG],[_.BLOCKQUOTE,h.BLOCKQUOTE],[_.BODY,h.BODY],[_.BR,h.BR],[_.BUTTON,h.BUTTON],[_.CAPTION,h.CAPTION],[_.CENTER,h.CENTER],[_.CODE,h.CODE],[_.COL,h.COL],[_.COLGROUP,h.COLGROUP],[_.DD,h.DD],[_.DESC,h.DESC],[_.DETAILS,h.DETAILS],[_.DIALOG,h.DIALOG],[_.DIR,h.DIR],[_.DIV,h.DIV],[_.DL,h.DL],[_.DT,h.DT],[_.EM,h.EM],[_.EMBED,h.EMBED],[_.FIELDSET,h.FIELDSET],[_.FIGCAPTION,h.FIGCAPTION],[_.FIGURE,h.FIGURE],[_.FONT,h.FONT],[_.FOOTER,h.FOOTER],[_.FOREIGN_OBJECT,h.FOREIGN_OBJECT],[_.FORM,h.FORM],[_.FRAME,h.FRAME],[_.FRAMESET,h.FRAMESET],[_.H1,h.H1],[_.H2,h.H2],[_.H3,h.H3],[_.H4,h.H4],[_.H5,h.H5],[_.H6,h.H6],[_.HEAD,h.HEAD],[_.HEADER,h.HEADER],[_.HGROUP,h.HGROUP],[_.HR,h.HR],[_.HTML,h.HTML],[_.I,h.I],[_.IMG,h.IMG],[_.IMAGE,h.IMAGE],[_.INPUT,h.INPUT],[_.IFRAME,h.IFRAME],[_.KEYGEN,h.KEYGEN],[_.LABEL,h.LABEL],[_.LI,h.LI],[_.LINK,h.LINK],[_.LISTING,h.LISTING],[_.MAIN,h.MAIN],[_.MALIGNMARK,h.MALIGNMARK],[_.MARQUEE,h.MARQUEE],[_.MATH,h.MATH],[_.MENU,h.MENU],[_.META,h.META],[_.MGLYPH,h.MGLYPH],[_.MI,h.MI],[_.MO,h.MO],[_.MN,h.MN],[_.MS,h.MS],[_.MTEXT,h.MTEXT],[_.NAV,h.NAV],[_.NOBR,h.NOBR],[_.NOFRAMES,h.NOFRAMES],[_.NOEMBED,h.NOEMBED],[_.NOSCRIPT,h.NOSCRIPT],[_.OBJECT,h.OBJECT],[_.OL,h.OL],[_.OPTGROUP,h.OPTGROUP],[_.OPTION,h.OPTION],[_.P,h.P],[_.PARAM,h.PARAM],[_.PLAINTEXT,h.PLAINTEXT],[_.PRE,h.PRE],[_.RB,h.RB],[_.RP,h.RP],[_.RT,h.RT],[_.RTC,h.RTC],[_.RUBY,h.RUBY],[_.S,h.S],[_.SCRIPT,h.SCRIPT],[_.SEARCH,h.SEARCH],[_.SECTION,h.SECTION],[_.SELECT,h.SELECT],[_.SOURCE,h.SOURCE],[_.SMALL,h.SMALL],[_.SPAN,h.SPAN],[_.STRIKE,h.STRIKE],[_.STRONG,h.STRONG],[_.STYLE,h.STYLE],[_.SUB,h.SUB],[_.SUMMARY,h.SUMMARY],[_.SUP,h.SUP],[_.TABLE,h.TABLE],[_.TBODY,h.TBODY],[_.TEMPLATE,h.TEMPLATE],[_.TEXTAREA,h.TEXTAREA],[_.TFOOT,h.TFOOT],[_.TD,h.TD],[_.TH,h.TH],[_.THEAD,h.THEAD],[_.TITLE,h.TITLE],[_.TR,h.TR],[_.TRACK,h.TRACK],[_.TT,h.TT],[_.U,h.U],[_.UL,h.UL],[_.SVG,h.SVG],[_.VAR,h.VAR],[_.WBR,h.WBR],[_.XMP,h.XMP]]);function Sr(e){var t;return(t=YR.get(e))!==null&&t!==void 0?t:h.UNKNOWN}const $=h,GR={[W.HTML]:new Set([$.ADDRESS,$.APPLET,$.AREA,$.ARTICLE,$.ASIDE,$.BASE,$.BASE
vendor: 14,004 bytes, line 9699
9699FONT,$.BGSOUND,$.BLOCKQUOTE,$.BODY,$.BR,$.BUTTON,$.CAPTION,$.CENTER,$.COL,$.COLGROUP,$.DD,$.DETAILS,$.DIR,$.DIV,$.DL,$.DT,$.EMBED,$.FIELDSET,$.FIGCAPTION,$.FIGURE,$.FOOTER,$.FORM,$.FRAME,$.FRAMESET,$.H1,$.H2,$.H3,$.H4,$.H5,$.H6,$.HEAD,$.HEADER,$.HGROUP,$.HR,$.HTML,$.IFRAME,$.IMG,$.INPUT,$.LI,$.LINK,$.LISTING,$.MAIN,$.MARQUEE,$.MENU,$.META,$.NAV,$.NOEMBED,$.NOFRAMES,$.NOSCRIPT,$.OBJECT,$.OL,$.P,$.PARAM,$.PLAINTEXT,$.PRE,$.SCRIPT,$.SECTION,$.SELECT,$.SOURCE,$.STYLE,$.SUMMARY,$.TABLE,$.TBODY,$.TD,$.TEMPLATE,$.TEXTAREA,$.TFOOT,$.TH,$.THEAD,$.TITLE,$.TR,$.TRACK,$.UL,$.WBR,$.XMP]),[W.MATHML]:new Set([$.MI,$.MO,$.MN,$.MS,$.MTEXT,$.ANNOTATION_XML]),[W.SVG]:new Set([$.TITLE,$.FOREIGN_OBJECT,$.DESC]),[W.XLINK]:new Set,[W.XML]:new Set,[W.XMLNS]:new Set},hp=new Set([$.H1,$.H2,$.H3,$.H4,$.H5,$.H6]);_.STYLE,_.SCRIPT,_.XMP,_.IFRAME,_.NOEMBED,_.NOFRAMES,_.PLAINTEXT;var E;(function(e){e[e.DATA=0]="DATA",e[e.RCDATA=1]="RCDATA",e[e.RAWTEXT=2]="RAWTEXT",e[e.SCRIPT_DATA=3]="SCRIPT_DATA",e[e.PLAINTEXT=4]="PLAINTEXT",e[e.TAG_OPEN=5]="TAG_OPEN",e[e.END_TAG_OPEN=6]="END_TAG_OPEN",e[e.TAG_NAME=7]="TAG_NAME",e[e.RCDATA_LESS_THAN_SIGN=8]="RCDATA_LESS_THAN_SIGN",e[e.RCDATA_END_TAG_OPEN=9]="RCDATA_END_TAG_OPEN",e[e.RCDATA_END_TAG_NAME=10]="RCDATA_END_TAG_NAME",e[e.RAWTEXT_LESS_THAN_SIGN=11]="RAWTEXT_LESS_THAN_SIGN",e[e.RAWTEXT_END_TAG_OPEN=12]="RAWTEXT_END_TAG_OPEN",e[e.RAWTEXT_END_TAG_NAME=13]="RAWTEXT_END_TAG_NAME",e[e.SCRIPT_DATA_LESS_THAN_SIGN=14]="SCRIPT_DATA_LESS_THAN_SIGN",e[e.SCRIPT_DATA_END_TAG_OPEN=15]="SCRIPT_DATA_END_TAG_OPEN",e[e.SCRIPT_DATA_END_TAG_NAME=16]="SCRIPT_DATA_END_TAG_NAME",e[e.SCRIPT_DATA_ESCAPE_START=17]="SCRIPT_DATA_ESCAPE_START",e[e.SCRIPT_DATA_ESCAPE_START_DASH=18]="SCRIPT_DATA_ESCAPE_START_DASH",e[e.SCRIPT_DATA_ESCAPED=19]="SCRIPT_DATA_ESCAPED",e[e.SCRIPT_DATA_ESCAPED_DASH=20]="SCRIPT_DATA_ESCAPED_DASH",e[e.SCRIPT_DATA_ESCAPED_DASH_DASH=21]="SCRIPT_DATA_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN=22]="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_OPEN=23]="SCRIPT_DATA_ESCAPED_END_TAG_OPEN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_NAME=24]="SCRIPT_DATA_ESCAPED_END_TAG_NAME",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_START=25]="SCRIPT_DATA_DOUBLE_ESCAPE_START",e[e.SCRIPT_DATA_DOUBLE_ESCAPED=26]="SCRIPT_DATA_DOUBLE_ESCAPED",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH=27]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH=28]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN=29]="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_END=30]="SCRIPT_DATA_DOUBLE_ESCAPE_END",e[e.BEFORE_ATTRIBUTE_NAME=31]="BEFORE_ATTRIBUTE_NAME",e[e.ATTRIBUTE_NAME=32]="ATTRIBUTE_NAME",e[e.AFTER_ATTRIBUTE_NAME=33]="AFTER_ATTRIBUTE_NAME",e[e.BEFORE_ATTRIBUTE_VALUE=34]="BEFORE_ATTRIBUTE_VALUE",e[e.ATTRIBUTE_VALUE_DOUBLE_QUOTED=35]="ATTRIBUTE_VALUE_DOUBLE_QUOTED",e[e.ATTRIBUTE_VALUE_SINGLE_QUOTED=36]="ATTRIBUTE_VALUE_SINGLE_QUOTED",e[e.ATTRIBUTE_VALUE_UNQUOTED=37]="ATTRIBUTE_VALUE_UNQUOTED",e[e.AFTER_ATTRIBUTE_VALUE_QUOTED=38]="AFTER_ATTRIBUTE_VALUE_QUOTED",e[e.SELF_CLOSING_START_TAG=39]="SELF_CLOSING_START_TAG",e[e.BOGUS_COMMENT=40]="BOGUS_COMMENT",e[e.MARKUP_DECLARATION_OPEN=41]="MARKUP_DECLARATION_OPEN",e[e.COMMENT_START=42]="COMMENT_START",e[e.COMMENT_START_DASH=43]="COMMENT_START_DASH",e[e.COMMENT=44]="COMMENT",e[e.COMMENT_LESS_THAN_SIGN=45]="COMMENT_LESS_THAN_SIGN",e[e.COMMENT_LESS_THAN_SIGN_BANG=46]="COMMENT_LESS_THAN_SIGN_BANG",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH=47]="COMMENT_LESS_THAN_SIGN_BANG_DASH",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH=48]="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH",e[e.COMMENT_END_DASH=49]="COMMENT_END_DASH",e[e.COMMENT_END=50]="COMMENT_END",e[e.COMMENT_END_BANG=51]="COMMENT_END_BANG",e[e.DOCTYPE=52]="DOCTYPE",e[e.BEFORE_DOCTYPE_NAME=53]="BEFORE_DOCTYPE_NAME",e[e.DOCTYPE_NAME=54]="DOCTYPE_NAME",e[e.AFTER_DOCTYPE_NAME=55]="AFTER_DOCTYPE_NAME",e[e.AFTER_DOCTYPE_PUBLIC_KEYWORD=56]="AFTER_DOCTYPE_PUBLIC_KEYWORD",e[e.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER=57]="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER",e[e.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED=58]="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED=59]="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_PUBLIC_IDENTIFIER=60]="AFTER_DOCTYPE_PUBLIC_IDENTIFIER",e[e.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS=61]="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS",e[e.AFTER_DOCTYPE_SYSTEM_KEYWORD=62]="AFTER_DOCTYPE_SYSTEM_KEYWORD",e[e.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER=63]="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER",e[e.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED=64]="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED=65]="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_SYSTEM_IDENTIFIER=66]="AFTER_DOCTYPE_SYSTEM_IDENTIFIER",e[e.BOGUS_DOCTYPE=67]="BOGUS_DOCTYPE",e[e.CDATA_SECTION=68]="CDATA_SECTION",e[e.CDATA_SECTION_BRACKET=69]="CDATA_SECTION_BRACKET",e[e.CDATA_SECTION_END=70]="CDATA_SECTION_END",e[e.CHARACTER_REFERENCE=71]="CHARACTER_REFERENCE",e[e.AMBIGUOUS_AMPERSAND=72]="AMBIGUOUS_AMPERSAND"})(E||(E={}));const Le={DATA:E.DATA,RCDATA:E.RCDATA,RAWTEXT:E.RAWTEXT,SCRIPT_DATA:E.SCRIPT_DATA,PLAINTEXT:E.PLAINTEXT,CDATA_SECTION:E.CDATA_SECTION};function QR(e){return e>=k.DIGIT_0&&e<=k.DIGIT_9}function ns(e){return e>=k.LATIN_CAPITAL_A&&e<=k.LATIN_CAPITAL_Z}function KR(e){return e>=k.LATIN_SMALL_A&&e<=k.LATIN_SMALL_Z}function ca(e){return KR(e)||ns(e)}function dy(e){return ca(e)||QR(e)}function Xo(e){return e+32}function fk(e){return e===k.SPACE||e===k.LINE_FEED||e===k.TABULATION||e===k.FORM_FEED}function my(e){return fk(e)||e===k.SOLIDUS||e===k.GREATER_THAN_SIGN}function XR(e){return e===k.NULL?z.nullCharacterReference:e>1114111?z.characterReferenceOutsideUnicodeRange:dk(e)?z.surrogateCharacterReference:pk(e)?z.noncharacterCharacterReference:mk(e)||e===k.CARRIAGE_RETURN?z.controlCharacterReference:null}class ZR{constructor(t,n){this.options=t,this.handler=n,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1,this.lastStartTagName="",this.active=!1,this.state=E.DATA,this.returnState=E.DATA,this.entityStartPos=0,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new LR(n),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new WR(zR,(a,r)=>{this.preprocessor.pos=this.entityStartPos+r-1,this._flushCodePointConsumedAsCharacterReference(a)},n.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(z.missingSemicolonAfterCharacterReference,1)},absenceOfDigitsInNumericCharacterReference:a=>{this._err(z.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+a)},validateNumericCharacterReference:a=>{const r=XR(a);r&&this._err(r,1)}}:void 0)}_err(t,n=0){var a,r;(r=(a=this.handler).onParseError)===null||r===void 0||r.call(a,this.preprocessor.getError(t,n))}getCurrentLocation(t){return this.options.sourceCodeLocationInfo?{startLine:this.preprocessor.line,startCol:this.preprocessor.col-t,startOffset:this.preprocessor.offset-t,endLine:-1,endCol:-1,endOffset:-1}:null}_runParsingLoop(){if(!this.inLoop){for(this.inLoop=!0;this.active&&!this.paused;){this.consumedAfterSnapshot=0;const t=this._consume();this._ensureHibernation()||this._callState(t)}this.inLoop=!1}}pause(){this.paused=!0}resume(t){if(!this.paused)throw new Error("Parser was already resumed");this.paused=!1,!this.inLoop&&(this._runParsingLoop(),this.paused||t==null||t())}write(t,n,a){this.active=!0,this.preprocessor.write(t,n),this._runParsingLoop(),this.paused||a==null||a()}insertHtmlAtCurrentPos(t){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(t),this._runParsingLoop()}_ensureHibernation(){return this.preprocessor.endOfChunkHit?(this.preprocessor.retreat(this.consumedAfterSnapshot),this.consumedAfterSnapshot=0,this.active=!1,!0):!1}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_advanceBy(t){this.consumedAfterSnapshot+=t;for(let n=0;n<t;n++)this.preprocessor.advance()}_consumeSequenceIfMatch(t,n){return this.preprocessor.startsWith(t,n)?(this._advanceBy(t.length-1),!0):!1}_createStartTagToken(){this.currentToken={type:le.START_TAG,tagName:"",tagID:h.UNKNOWN,selfClosing:!1,ackSelfClosing:!1,attrs:[],location:this.getCurrentLocation(1)}}_createEndTagToken(){this.currentToken={type:le.END_TAG,tagName:"",tagID:h.UNKNOWN,selfClosing:!1,ackSelfClosing:!1,attrs:[],location:this.getCurrentLocation(2)}}_createCommentToken(t){this.currentToken={type:le.COMMENT,data:"",location:this.getCurrentLocation(t)}}_createDoctypeToken(t){this.currentToken={type:le.DOCTYPE,name:t,forceQuirks:!1,publicId:null,systemId:null,location:this.currentLocation}}_createCharacterToken(t,n){this.currentCharacterToken={type:t,chars:n,location:this.currentLocation}}_createAttr(t){this.currentAttr={name:t,value:""},this.currentLocation=this.getCurrentLocation(0)}_leaveAttrName(){var t,n;const a=this.currentToken;if(hk(a,this.currentAttr.name)===null){if(a.attrs.push(this.currentAttr),a.location&&this.currentLocation){const r=(t=(n=a.location).attrs)!==null&&t!==void 0?t:n.attrs=Object.create(null);r[this.currentAttr.name]=this.currentLocation,this._leaveAttrValue()}}else this._err(z.duplicateAttribute)}_leaveAttrValue(){this.currentLocation&&(this.currentLocation.endLine=this.preprocessor.line,this.currentLocation.endCol=this.preprocessor.col,this.currentLocation.endOffset=this.preprocessor.offset)}prepareToken(t){this._emitCurrentCharacterToken(t.location),this.currentToken=null,t.location&&(t.location.endLine=this.preprocessor.line,t.location.endCol=this.preprocessor.col+1,t.location.endOffset=this.preprocessor.offset+1),this.currentLocation=this.getCurrentLocation(-1)}emitCurrentTagToken(){const t=this.currentToken;this.prepareToken(t),t.tagID=Sr(t.tagName),t.type===le.START_TAG?(this.lastStartTagName=t.tagName,this.handler.onStartTag(t)):(t.attrs.length>0&&this._err(z.endTagWithAttributes),t.selfClosing&&this._err(z.endTagWithTrailingSolidus),this.handler.onEndTag(t)),this.preprocessor.dropParsedChunk()}emitCurrentComment(t){this.prepareToken(t),this.handler.onComment(t),this.preprocessor.dropParsedChunk()}emitCurrentDoctype(t){this.prepareToken(t),this.handler.onDoctype(t),this.preprocessor.dropParsedChunk()}_emitCurrentCharacterToken(t){if(this.currentCharacterToken){switch(t&&this.currentCharacterToken.location&&(this.currentCharacterToken.location.endLine=t.startLine,this.currentCharacterToken.location.endCol=t.startCol,this.currentCharacterToken.location.endOffset=t.startOffset),this.currentCharacterToken.type){case le.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case le.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case le.WHITESPACE_CHARACTER:{this.handler.onWhitespaceCharacter(this.currentCharacterToken);break}}this.currentCharacterToken=null}}_emitEOFToken(){const t=this.getCurrentLocation(0);t&&(t.endLine=t.startLine,t.endCol=t.startCol,t.endOffset=t.startOffset),this._emitCurrentCharacterToken(t),this.handler.onEof({type:le.EOF,location:t}),this.active=!1}_appendCharToCurrentCharacterToken(t,n){if(this.currentCharacterToken)if(this.currentCharacterToken.type===t){this.currentCharacterToken.chars+=n;return}else this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk();this._createCharacterToken(t,n)}_emitCodePoint(t){const n=fk(t)?le.WHITESPACE_CHARACTER:t===k.NULL?le.NULL_CHARACTER:le.CHARACTER;this._appendCharToCurrentCharacterToken(n,String.fromCodePoint(t))}_emitChars(t){this._appendCharToCurrentCharacterToken(le.CHARACTER,t)}_startCharacterReference(){this.returnState=this.state,this.state=E.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?Vn.Attribute:Vn.Legacy)}_isCharacterReferenceInAttribute(){return this.returnState===E.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===E.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===E.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(t){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(t):this._emitCodePoint(t)}_callState(t){switch(this.state){case E.DATA:{this._stateData(t);break}case E.RCDATA:{this._stateRcdata(t);break}case E.RAWTEXT:{this._stateRawtext(t);break}case E.SCRIPT_DATA:{this._stateScriptData(t);break}case E.PLAINTEXT:{this._statePlaintext(t);break}case E.TAG_OPEN:{this._stateTagOpen(t);break}case E.END_TAG_OPEN:{this._stateEndTagOpen(t);break}case E.TAG_NAME:{this._stateTagName(t);break}case E.RCDATA_LESS_THAN_SIGN:{this._stateRcdataLessThanSign(t);break}case E.RCDATA_END_TAG_OPEN:{this._stateRcdataEndTagOpen(t);break}case E.RCDATA_END_TAG_NAME:{this._stateRcdataEndTagName(t);break}case E.RAWTEXT_LESS_THAN_SIGN:{this._stateRawtextLessThanSign(t);break}case E.RAWTEXT_END_TAG_OPEN:{this._stateRawtextEndTagOpen(t);break}case E.RAWTEXT_END_TAG_NAME:{this._stateRawtextEndTagName(t);break}case E.SCRIPT_DATA_LESS_THAN_SIGN:{this._stateScriptDataLessThanSign(t);break}case E.SCRIPT_DATA_END_TAG_OPEN:{this._stateScriptDataEndTagOpen(t);break}case E.SCRIPT_DATA_END_TAG_NAME:{this._stateScriptDataEndTagName(t);break}case E.SCRIPT_DATA_ESCAPE_START:{this._stateScriptDataEscapeStart(t);break}case E.SCRIPT_DATA_ESCAPE_START_DASH:{this._stateScriptDataEscapeStartDash(t);break}case E.SCRIPT_DATA_ESCAPED:{this._stateScriptDataEscaped(t);break}case E.SCRIPT_DATA_ESCAPED_DASH:{this._stateScriptDataEscapedDash(t);break}case E.SCRIPT_DATA_ESCAPED_DASH_DASH:{this._stateScriptDataEscapedDashDash(t);break}case E.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataEscapedLessThanSign(t);break}case E.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:{this._stateScriptDataEscapedEndTagOpen(t);break}case E.SCRIPT_DATA_ESCAPED_END_TAG_NAME:{this._stateScriptDataEscapedEndTagName(t);break}case E.SCRIPT_DATA_DOUBLE_ESCAPE_START:{this._stateScriptDataDoubleEscape
vendor: 5,354 bytes, line 9699
9699Start(t);break}case E.SCRIPT_DATA_DOUBLE_ESCAPED:{this._stateScriptDataDoubleEscaped(t);break}case E.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:{this._stateScriptDataDoubleEscapedDash(t);break}case E.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:{this._stateScriptDataDoubleEscapedDashDash(t);break}case E.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataDoubleEscapedLessThanSign(t);break}case E.SCRIPT_DATA_DOUBLE_ESCAPE_END:{this._stateScriptDataDoubleEscapeEnd(t);break}case E.BEFORE_ATTRIBUTE_NAME:{this._stateBeforeAttributeName(t);break}case E.ATTRIBUTE_NAME:{this._stateAttributeName(t);break}case E.AFTER_ATTRIBUTE_NAME:{this._stateAfterAttributeName(t);break}case E.BEFORE_ATTRIBUTE_VALUE:{this._stateBeforeAttributeValue(t);break}case E.ATTRIBUTE_VALUE_DOUBLE_QUOTED:{this._stateAttributeValueDoubleQuoted(t);break}case E.ATTRIBUTE_VALUE_SINGLE_QUOTED:{this._stateAttributeValueSingleQuoted(t);break}case E.ATTRIBUTE_VALUE_UNQUOTED:{this._stateAttributeValueUnquoted(t);break}case E.AFTER_ATTRIBUTE_VALUE_QUOTED:{this._stateAfterAttributeValueQuoted(t);break}case E.SELF_CLOSING_START_TAG:{this._stateSelfClosingStartTag(t);break}case E.BOGUS_COMMENT:{this._stateBogusComment(t);break}case E.MARKUP_DECLARATION_OPEN:{this._stateMarkupDeclarationOpen(t);break}case E.COMMENT_START:{this._stateCommentStart(t);break}case E.COMMENT_START_DASH:{this._stateCommentStartDash(t);break}case E.COMMENT:{this._stateComment(t);break}case E.COMMENT_LESS_THAN_SIGN:{this._stateCommentLessThanSign(t);break}case E.COMMENT_LESS_THAN_SIGN_BANG:{this._stateCommentLessThanSignBang(t);break}case E.COMMENT_LESS_THAN_SIGN_BANG_DASH:{this._stateCommentLessThanSignBangDash(t);break}case E.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:{this._stateCommentLessThanSignBangDashDash(t);break}case E.COMMENT_END_DASH:{this._stateCommentEndDash(t);break}case E.COMMENT_END:{this._stateCommentEnd(t);break}case E.COMMENT_END_BANG:{this._stateCommentEndBang(t);break}case E.DOCTYPE:{this._stateDoctype(t);break}case E.BEFORE_DOCTYPE_NAME:{this._stateBeforeDoctypeName(t);break}case E.DOCTYPE_NAME:{this._stateDoctypeName(t);break}case E.AFTER_DOCTYPE_NAME:{this._stateAfterDoctypeName(t);break}case E.AFTER_DOCTYPE_PUBLIC_KEYWORD:{this._stateAfterDoctypePublicKeyword(t);break}case E.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateBeforeDoctypePublicIdentifier(t);break}case E.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypePublicIdentifierDoubleQuoted(t);break}case E.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypePublicIdentifierSingleQuoted(t);break}case E.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateAfterDoctypePublicIdentifier(t);break}case E.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:{this._stateBetweenDoctypePublicAndSystemIdentifiers(t);break}case E.AFTER_DOCTYPE_SYSTEM_KEYWORD:{this._stateAfterDoctypeSystemKeyword(t);break}case E.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateBeforeDoctypeSystemIdentifier(t);break}case E.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypeSystemIdentifierDoubleQuoted(t);break}case E.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypeSystemIdentifierSingleQuoted(t);break}case E.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateAfterDoctypeSystemIdentifier(t);break}case E.BOGUS_DOCTYPE:{this._stateBogusDoctype(t);break}case E.CDATA_SECTION:{this._stateCdataSection(t);break}case E.CDATA_SECTION_BRACKET:{this._stateCdataSectionBracket(t);break}case E.CDATA_SECTION_END:{this._stateCdataSectionEnd(t);break}case E.CHARACTER_REFERENCE:{this._stateCharacterReference();break}case E.AMBIGUOUS_AMPERSAND:{this._stateAmbiguousAmpersand(t);break}default:throw new Error("Unknown state")}}_stateData(t){switch(t){case k.LESS_THAN_SIGN:{this.state=E.TAG_OPEN;break}case k.AMPERSAND:{this._startCharacterReference();break}case k.NULL:{this._err(z.unexpectedNullCharacter),this._emitCodePoint(t);break}case k.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateRcdata(t){switch(t){case k.AMPERSAND:{this._startCharacterReference();break}case k.LESS_THAN_SIGN:{this.state=E.RCDATA_LESS_THAN_SIGN;break}case k.NULL:{this._err(z.unexpectedNullCharacter),this._emitChars(Ie);break}case k.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateRawtext(t){switch(t){case k.LESS_THAN_SIGN:{this.state=E.RAWTEXT_LESS_THAN_SIGN;break}case k.NULL:{this._err(z.unexpectedNullCharacter),this._emitChars(Ie);break}case k.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateScriptData(t){switch(t){case k.LESS_THAN_SIGN:{this.state=E.SCRIPT_DATA_LESS_THAN_SIGN;break}case k.NULL:{this._err(z.unexpectedNullCharacter),this._emitChars(Ie);break}case k.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_statePlaintext(t){switch(t){case k.NULL:{this._err(z.unexpectedNullCharacter),this._emitChars(Ie);break}case k.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateTagOpen(t){if(ca(t))this._createStartTagToken(),this.state=E.TAG_NAME,this._stateTagName(t);else switch(t){case k.EXCLAMATION_MARK:{this.state=E.MARKUP_DECLARATION_OPEN;break}case k.SOLIDUS:{this.state=E.END_TAG_OPEN;break}case k.QUESTION_MARK:{this._err(z.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=E.BOGUS_COMMENT,this._stateBogusComment(t);break}case k.EOF:{this._err(z.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}
vendor: 97,478 bytes, line 9699
9699default:this._err(z.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=E.DATA,this._stateData(t)}}_stateEndTagOpen(t){if(ca(t))this._createEndTagToken(),this.state=E.TAG_NAME,this._stateTagName(t);else switch(t){case k.GREATER_THAN_SIGN:{this._err(z.missingEndTagName),this.state=E.DATA;break}case k.EOF:{this._err(z.eofBeforeTagName),this._emitChars("</"),this._emitEOFToken();break}default:this._err(z.invalidFirstCharacterOfTagName),this._createCommentToken(2),this.state=E.BOGUS_COMMENT,this._stateBogusComment(t)}}_stateTagName(t){const n=this.currentToken;switch(t){case k.SPACE:case k.LINE_FEED:case k.TABULATION:case k.FORM_FEED:{this.state=E.BEFORE_ATTRIBUTE_NAME;break}case k.SOLIDUS:{this.state=E.SELF_CLOSING_START_TAG;break}case k.GREATER_THAN_SIGN:{this.state=E.DATA,this.emitCurrentTagToken();break}case k.NULL:{this._err(z.unexpectedNullCharacter),n.tagName+=Ie;break}case k.EOF:{this._err(z.eofInTag),this._emitEOFToken();break}default:n.tagName+=String.fromCodePoint(ns(t)?Xo(t):t)}}_stateRcdataLessThanSign(t){t===k.SOLIDUS?this.state=E.RCDATA_END_TAG_OPEN:(this._emitChars("<"),this.state=E.RCDATA,this._stateRcdata(t))}_stateRcdataEndTagOpen(t){ca(t)?(this.state=E.RCDATA_END_TAG_NAME,this._stateRcdataEndTagName(t)):(this._emitChars("</"),this.state=E.RCDATA,this._stateRcdata(t))}handleSpecialEndTag(t){if(!this.preprocessor.startsWith(this.lastStartTagName,!1))return!this._ensureHibernation();this._createEndTagToken();const n=this.currentToken;switch(n.tagName=this.lastStartTagName,this.preprocessor.peek(this.lastStartTagName.length)){case k.SPACE:case k.LINE_FEED:case k.TABULATION:case k.FORM_FEED:return this._advanceBy(this.lastStartTagName.length),this.state=E.BEFORE_ATTRIBUTE_NAME,!1;case k.SOLIDUS:return this._advanceBy(this.lastStartTagName.length),this.state=E.SELF_CLOSING_START_TAG,!1;case k.GREATER_THAN_SIGN:return this._advanceBy(this.lastStartTagName.length),this.emitCurrentTagToken(),this.state=E.DATA,!1;default:return!this._ensureHibernation()}}_stateRcdataEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=E.RCDATA,this._stateRcdata(t))}_stateRawtextLessThanSign(t){t===k.SOLIDUS?this.state=E.RAWTEXT_END_TAG_OPEN:(this._emitChars("<"),this.state=E.RAWTEXT,this._stateRawtext(t))}_stateRawtextEndTagOpen(t){ca(t)?(this.state=E.RAWTEXT_END_TAG_NAME,this._stateRawtextEndTagName(t)):(this._emitChars("</"),this.state=E.RAWTEXT,this._stateRawtext(t))}_stateRawtextEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=E.RAWTEXT,this._stateRawtext(t))}_stateScriptDataLessThanSign(t){switch(t){case k.SOLIDUS:{this.state=E.SCRIPT_DATA_END_TAG_OPEN;break}case k.EXCLAMATION_MARK:{this.state=E.SCRIPT_DATA_ESCAPE_START,this._emitChars("<!");break}default:this._emitChars("<"),this.state=E.SCRIPT_DATA,this._stateScriptData(t)}}_stateScriptDataEndTagOpen(t){ca(t)?(this.state=E.SCRIPT_DATA_END_TAG_NAME,this._stateScriptDataEndTagName(t)):(this._emitChars("</"),this.state=E.SCRIPT_DATA,this._stateScriptData(t))}_stateScriptDataEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=E.SCRIPT_DATA,this._stateScriptData(t))}_stateScriptDataEscapeStart(t){t===k.HYPHEN_MINUS?(this.state=E.SCRIPT_DATA_ESCAPE_START_DASH,this._emitChars("-")):(this.state=E.SCRIPT_DATA,this._stateScriptData(t))}_stateScriptDataEscapeStartDash(t){t===k.HYPHEN_MINUS?(this.state=E.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-")):(this.state=E.SCRIPT_DATA,this._stateScriptData(t))}_stateScriptDataEscaped(t){switch(t){case k.HYPHEN_MINUS:{this.state=E.SCRIPT_DATA_ESCAPED_DASH,this._emitChars("-");break}case k.LESS_THAN_SIGN:{this.state=E.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case k.NULL:{this._err(z.unexpectedNullCharacter),this._emitChars(Ie);break}case k.EOF:{this._err(z.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateScriptDataEscapedDash(t){switch(t){case k.HYPHEN_MINUS:{this.state=E.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-");break}case k.LESS_THAN_SIGN:{this.state=E.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case k.NULL:{this._err(z.unexpectedNullCharacter),this.state=E.SCRIPT_DATA_ESCAPED,this._emitChars(Ie);break}case k.EOF:{this._err(z.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=E.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t)}}_stateScriptDataEscapedDashDash(t){switch(t){case k.HYPHEN_MINUS:{this._emitChars("-");break}case k.LESS_THAN_SIGN:{this.state=E.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case k.GREATER_THAN_SIGN:{this.state=E.SCRIPT_DATA,this._emitChars(">");break}case k.NULL:{this._err(z.unexpectedNullCharacter),this.state=E.SCRIPT_DATA_ESCAPED,this._emitChars(Ie);break}case k.EOF:{this._err(z.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=E.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t)}}_stateScriptDataEscapedLessThanSign(t){t===k.SOLIDUS?this.state=E.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:ca(t)?(this._emitChars("<"),this.state=E.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(t)):(this._emitChars("<"),this.state=E.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t))}_stateScriptDataEscapedEndTagOpen(t){ca(t)?(this.state=E.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(t)):(this._emitChars("</"),this.state=E.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t))}_stateScriptDataEscapedEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=E.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t))}_stateScriptDataDoubleEscapeStart(t){if(this.preprocessor.startsWith(kt.SCRIPT,!1)&&my(this.preprocessor.peek(kt.SCRIPT.length))){this._emitCodePoint(t);for(let n=0;n<kt.SCRIPT.length;n++)this._emitCodePoint(this._consume());this.state=E.SCRIPT_DATA_DOUBLE_ESCAPED}else this._ensureHibernation()||(this.state=E.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t))}_stateScriptDataDoubleEscaped(t){switch(t){case k.HYPHEN_MINUS:{this.state=E.SCRIPT_DATA_DOUBLE_ESCAPED_DASH,this._emitChars("-");break}case k.LESS_THAN_SIGN:{this.state=E.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case k.NULL:{this._err(z.unexpectedNullCharacter),this._emitChars(Ie);break}case k.EOF:{this._err(z.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateScriptDataDoubleEscapedDash(t){switch(t){case k.HYPHEN_MINUS:{this.state=E.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH,this._emitChars("-");break}case k.LESS_THAN_SIGN:{this.state=E.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case k.NULL:{this._err(z.unexpectedNullCharacter),this.state=E.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(Ie);break}case k.EOF:{this._err(z.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=E.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t)}}_stateScriptDataDoubleEscapedDashDash(t){switch(t){case k.HYPHEN_MINUS:{this._emitChars("-");break}case k.LESS_THAN_SIGN:{this.state=E.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case k.GREATER_THAN_SIGN:{this.state=E.SCRIPT_DATA,this._emitChars(">");break}case k.NULL:{this._err(z.unexpectedNullCharacter),this.state=E.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(Ie);break}case k.EOF:{this._err(z.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=E.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t)}}_stateScriptDataDoubleEscapedLessThanSign(t){t===k.SOLIDUS?(this.state=E.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/")):(this.state=E.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(t))}_stateScriptDataDoubleEscapeEnd(t){if(this.preprocessor.startsWith(kt.SCRIPT,!1)&&my(this.preprocessor.peek(kt.SCRIPT.length))){this._emitCodePoint(t);for(let n=0;n<kt.SCRIPT.length;n++)this._emitCodePoint(this._consume());this.state=E.SCRIPT_DATA_ESCAPED}else this._ensureHibernation()||(this.state=E.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(t))}_stateBeforeAttributeName(t){switch(t){case k.SPACE:case k.LINE_FEED:case k.TABULATION:case k.FORM_FEED:break;case k.SOLIDUS:case k.GREATER_THAN_SIGN:case k.EOF:{this.state=E.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(t);break}case k.EQUALS_SIGN:{this._err(z.unexpectedEqualsSignBeforeAttributeName),this._createAttr("="),this.state=E.ATTRIBUTE_NAME;break}default:this._createAttr(""),this.state=E.ATTRIBUTE_NAME,this._stateAttributeName(t)}}_stateAttributeName(t){switch(t){case k.SPACE:case k.LINE_FEED:case k.TABULATION:case k.FORM_FEED:case k.SOLIDUS:case k.GREATER_THAN_SIGN:case k.EOF:{this._leaveAttrName(),this.state=E.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(t);break}case k.EQUALS_SIGN:{this._leaveAttrName(),this.state=E.BEFORE_ATTRIBUTE_VALUE;break}case k.QUOTATION_MARK:case k.APOSTROPHE:case k.LESS_THAN_SIGN:{this._err(z.unexpectedCharacterInAttributeName),this.currentAttr.name+=String.fromCodePoint(t);break}case k.NULL:{this._err(z.unexpectedNullCharacter),this.currentAttr.name+=Ie;break}default:this.currentAttr.name+=String.fromCodePoint(ns(t)?Xo(t):t)}}_stateAfterAttributeName(t){switch(t){case k.SPACE:case k.LINE_FEED:case k.TABULATION:case k.FORM_FEED:break;case k.SOLIDUS:{this.state=E.SELF_CLOSING_START_TAG;break}case k.EQUALS_SIGN:{this.state=E.BEFORE_ATTRIBUTE_VALUE;break}case k.GREATER_THAN_SIGN:{this.state=E.DATA,this.emitCurrentTagToken();break}case k.EOF:{this._err(z.eofInTag),this._emitEOFToken();break}default:this._createAttr(""),this.state=E.ATTRIBUTE_NAME,this._stateAttributeName(t)}}_stateBeforeAttributeValue(t){switch(t){case k.SPACE:case k.LINE_FEED:case k.TABULATION:case k.FORM_FEED:break;case k.QUOTATION_MARK:{this.state=E.ATTRIBUTE_VALUE_DOUBLE_QUOTED;break}case k.APOSTROPHE:{this.state=E.ATTRIBUTE_VALUE_SINGLE_QUOTED;break}case k.GREATER_THAN_SIGN:{this._err(z.missingAttributeValue),this.state=E.DATA,this.emitCurrentTagToken();break}default:this.state=E.ATTRIBUTE_VALUE_UNQUOTED,this._stateAttributeValueUnquoted(t)}}_stateAttributeValueDoubleQuoted(t){switch(t){case k.QUOTATION_MARK:{this.state=E.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case k.AMPERSAND:{this._startCharacterReference();break}case k.NULL:{this._err(z.unexpectedNullCharacter),this.currentAttr.value+=Ie;break}case k.EOF:{this._err(z.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t)}}_stateAttributeValueSingleQuoted(t){switch(t){case k.APOSTROPHE:{this.state=E.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case k.AMPERSAND:{this._startCharacterReference();break}case k.NULL:{this._err(z.unexpectedNullCharacter),this.currentAttr.value+=Ie;break}case k.EOF:{this._err(z.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t)}}_stateAttributeValueUnquoted(t){switch(t){case k.SPACE:case k.LINE_FEED:case k.TABULATION:case k.FORM_FEED:{this._leaveAttrValue(),this.state=E.BEFORE_ATTRIBUTE_NAME;break}case k.AMPERSAND:{this._startCharacterReference();break}case k.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=E.DATA,this.emitCurrentTagToken();break}case k.NULL:{this._err(z.unexpectedNullCharacter),this.currentAttr.value+=Ie;break}case k.QUOTATION_MARK:case k.APOSTROPHE:case k.LESS_THAN_SIGN:case k.EQUALS_SIGN:case k.GRAVE_ACCENT:{this._err(z.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=String.fromCodePoint(t);break}case k.EOF:{this._err(z.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t)}}_stateAfterAttributeValueQuoted(t){switch(t){case k.SPACE:case k.LINE_FEED:case k.TABULATION:case k.FORM_FEED:{this._leaveAttrValue(),this.state=E.BEFORE_ATTRIBUTE_NAME;break}case k.SOLIDUS:{this._leaveAttrValue(),this.state=E.SELF_CLOSING_START_TAG;break}case k.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=E.DATA,this.emitCurrentTagToken();break}case k.EOF:{this._err(z.eofInTag),this._emitEOFToken();break}default:this._err(z.missingWhitespaceBetweenAttributes),this.state=E.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(t)}}_stateSelfClosingStartTag(t){switch(t){case k.GREATER_THAN_SIGN:{const n=this.currentToken;n.selfClosing=!0,this.state=E.DATA,this.emitCurrentTagToken();break}case k.EOF:{this._err(z.eofInTag),this._emitEOFToken();break}default:this._err(z.unexpectedSolidusInTag),this.state=E.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(t)}}_stateBogusComment(t){const n=this.currentToken;switch(t){case k.GREATER_THAN_SIGN:{this.state=E.DATA,this.emitCurrentComment(n);break}case k.EOF:{this.emitCurrentComment(n),this._emitEOFToken();break}case k.NULL:{this._err(z.unexpectedNullCharacter),n.data+=Ie;break}default:n.data+=String.fromCodePoint(t)}}_stateMarkupDeclarationOpen(t){this._consumeSequenceIfMatch(kt.DASH_DASH,!0)?(this._createCommentToken(kt.DASH_DASH.length+1),this.state=E.COMMENT_START):this._consumeSequenceIfMatch(kt.DOCTYPE,!1)?(this.currentLocation=this.getCurrentLocation(kt.DOCTYPE.length+1),this.state=E.DOCTYPE):this._consumeSequenceIfMatch(kt.CDATA_START,!0)?this.inForeignNode?this.state=E.CDATA_SECTION:(this._err(z.cdataInHtmlContent),this._createCommentToken(kt.CDATA_START.length+1),this.currentToken.data="[CDATA[",this.state=E.BOGUS_COMMENT):this._ensureHibernation()||(this._err(z.incorrectlyOpenedComment),this._createCommentToken(2),this.state=E.BOGUS_COMMENT,this._stateBogusComment(t))}_stateCommentStart(t){switch(t){case k.HYPHEN_MINUS:{this.state=E.COMMENT_START_DASH;break}case k.GREATER_THAN_SIGN:{this._err(z.abruptClosingOfEmptyComment),this.state=E.DATA;const n=this.currentToken;this.emitCurrentComment(n);break}default:this.state=E.COMMENT,this._stateComment(t)}}_stateCommentStartDash(t){const n=this.currentToken;switch(t){case k.HYPHEN_MINUS:{this.state=E.COMMENT_END;break}case k.GREATER_THAN_SIGN:{this._err(z.abruptClosingOfEmptyComment),this.state=E.DATA,this.emitCurrentComment(n);break}case k.EOF:{this._err(z.eofInComment),this.emitCurrentComment(n),this._emitEOFToken();break}default:n.data+="-",this.state=E.COMMENT,this._stateComment(t)}}_stateComment(t){const n=this.currentToken;switch(t){case k.HYPHEN_MINUS:{this.state=E.COMMENT_END_DASH;break}case k.LESS_THAN_SIGN:{n.data+="<",this.state=E.COMMENT_LESS_THAN_SIGN;break}case k.NULL:{this._err(z.unexpectedNullCharacter),n.data+=Ie;break}case k.EOF:{this._err(z.eofInComment),this.emitCurrentComment(n),this._emitEOFToken();break}default:n.data+=String.fromCodePoint(t)}}_stateCommentLessThanSign(t){const n=this.currentToken;switch(t){case k.EXCLAMATION_MARK:{n.data+="!",this.state=E.COMMENT_LESS_THAN_SIGN_BANG;break}case k.LESS_THAN_SIGN:{n.data+="<";break}default:this.state=E.COMMENT,this._stateComment(t)}}_stateCommentLessThanSignBang(t){t===k.HYPHEN_MINUS?this.state=E.COMMENT_LESS_THAN_SIGN_BANG_DASH:(this.state=E.COMMENT,this._stateComment(t))}_stateCommentLessThanSignBangDash(t){t===k.HYPHEN_MINUS?this.state=E.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:(this.state=E.COMMENT_END_DASH,this._stateCommentEndDash(t))}_stateCommentLessThanSignBangDashDash(t){t!==k.GREATER_THAN_SIGN&&t!==k.EOF&&this._err(z.nestedComment),this.state=E.COMMENT_END,this._stateCommentEnd(t)}_stateCommentEndDash(t){const n=this.currentToken;switch(t){case k.HYPHEN_MINUS:{this.state=E.COMMENT_END;break}case k.EOF:{this._err(z.eofInComment),this.emitCurrentComment(n),this._emitEOFToken();break}default:n.data+="-",this.state=E.COMMENT,this._stateComment(t)}}_stateCommentEnd(t){const n=this.currentToken;switch(t){case k.GREATER_THAN_SIGN:{this.state=E.DATA,this.emitCurrentComment(n);break}case k.EXCLAMATION_MARK:{this.state=E.COMMENT_END_BANG;break}case k.HYPHEN_MINUS:{n.data+="-";break}case k.EOF:{this._err(z.eofInComment),this.emitCurrentComment(n),this._emitEOFToken();break}default:n.data+="--",this.state=E.COMMENT,this._stateComment(t)}}_stateCommentEndBang(t){const n=this.currentToken;switch(t){case k.HYPHEN_MINUS:{n.data+="--!",this.state=E.COMMENT_END_DASH;break}case k.GREATER_THAN_SIGN:{this._err(z.incorrectlyClosedComment),this.state=E.DATA,this.emitCurrentComment(n);break}case k.EOF:{this._err(z.eofInComment),this.emitCurrentComment(n),this._emitEOFToken();break}default:n.data+="--!",this.state=E.COMMENT,this._stateComment(t)}}_stateDoctype(t){switch(t){case k.SPACE:case k.LINE_FEED:case k.TABULATION:case k.FORM_FEED:{this.state=E.BEFORE_DOCTYPE_NAME;break}case k.GREATER_THAN_SIGN:{this.state=E.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(t);break}case k.EOF:{this._err(z.eofInDoctype),this._createDoctypeToken(null);const n=this.currentToken;n.forceQuirks=!0,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(z.missingWhitespaceBeforeDoctypeName),this.state=E.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(t)}}_stateBeforeDoctypeName(t){if(ns(t))this._createDoctypeToken(String.fromCharCode(Xo(t))),this.state=E.DOCTYPE_NAME;else switch(t){case k.SPACE:case k.LINE_FEED:case k.TABULATION:case k.FORM_FEED:break;case k.NULL:{this._err(z.unexpectedNullCharacter),this._createDoctypeToken(Ie),this.state=E.DOCTYPE_NAME;break}case k.GREATER_THAN_SIGN:{this._err(z.missingDoctypeName),this._createDoctypeToken(null);const n=this.currentToken;n.forceQuirks=!0,this.emitCurrentDoctype(n),this.state=E.DATA;break}case k.EOF:{this._err(z.eofInDoctype),this._createDoctypeToken(null);const n=this.currentToken;n.forceQuirks=!0,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._createDoctypeToken(String.fromCodePoint(t)),this.state=E.DOCTYPE_NAME}}_stateDoctypeName(t){const n=this.currentToken;switch(t){case k.SPACE:case k.LINE_FEED:case k.TABULATION:case k.FORM_FEED:{this.state=E.AFTER_DOCTYPE_NAME;break}case k.GREATER_THAN_SIGN:{this.state=E.DATA,this.emitCurrentDoctype(n);break}case k.NULL:{this._err(z.unexpectedNullCharacter),n.name+=Ie;break}case k.EOF:{this._err(z.eofInDoctype),n.forceQuirks=!0,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.name+=String.fromCodePoint(ns(t)?Xo(t):t)}}_stateAfterDoctypeName(t){const n=this.currentToken;switch(t){case k.SPACE:case k.LINE_FEED:case k.TABULATION:case k.FORM_FEED:break;case k.GREATER_THAN_SIGN:{this.state=E.DATA,this.emitCurrentDoctype(n);break}case k.EOF:{this._err(z.eofInDoctype),n.forceQuirks=!0,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._consumeSequenceIfMatch(kt.PUBLIC,!1)?this.state=E.AFTER_DOCTYPE_PUBLIC_KEYWORD:this._consumeSequenceIfMatch(kt.SYSTEM,!1)?this.state=E.AFTER_DOCTYPE_SYSTEM_KEYWORD:this._ensureHibernation()||(this._err(z.invalidCharacterSequenceAfterDoctypeName),n.forceQuirks=!0,this.state=E.BOGUS_DOCTYPE,this._stateBogusDoctype(t))}}_stateAfterDoctypePublicKeyword(t){const n=this.currentToken;switch(t){case k.SPACE:case k.LINE_FEED:case k.TABULATION:case k.FORM_FEED:{this.state=E.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;break}case k.QUOTATION_MARK:{this._err(z.missingWhitespaceAfterDoctypePublicKeyword),n.publicId="",this.state=E.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case k.APOSTROPHE:{this._err(z.missingWhitespaceAfterDoctypePublicKeyword),n.publicId="",this.state=E.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case k.GREATER_THAN_SIGN:{this._err(z.missingDoctypePublicIdentifier),n.forceQuirks=!0,this.state=E.DATA,this.emitCurrentDoctype(n);break}case k.EOF:{this._err(z.eofInDoctype),n.forceQuirks=!0,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(z.missingQuoteBeforeDoctypePublicIdentifier),n.forceQuirks=!0,this.state=E.BOGUS_DOCTYPE,this._stateBogusDoctype(t)}}_stateBeforeDoctypePublicIdentifier(t){const n=this.currentToken;switch(t){case k.SPACE:case k.LINE_FEED:case k.TABULATION:case k.FORM_FEED:break;case k.QUOTATION_MARK:{n.publicId="",this.state=E.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case k.APOSTROPHE:{n.publicId="",this.state=E.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case k.GREATER_THAN_SIGN:{this._err(z.missingDoctypePublicIdentifier),n.forceQuirks=!0,this.state=E.DATA,this.emitCurrentDoctype(n);break}case k.EOF:{this._err(z.eofInDoctype),n.forceQuirks=!0,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(z.missingQuoteBeforeDoctypePublicIdentifier),n.forceQuirks=!0,this.state=E.BOGUS_DOCTYPE,this._stateBogusDoctype(t)}}_stateDoctypePublicIdentifierDoubleQuoted(t){const n=this.currentToken;switch(t){case k.QUOTATION_MARK:{this.state=E.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case k.NULL:{this._err(z.unexpectedNullCharacter),n.publicId+=Ie;break}case k.GREATER_THAN_SIGN:{this._err(z.abruptDoctypePublicIdentifier),n.forceQuirks=!0,this.emitCurrentDoctype(n),this.state=E.DATA;break}case k.EOF:{this._err(z.eofInDoctype),n.forceQuirks=!0,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.publicId+=String.fromCodePoint(t)}}_stateDoctypePublicIdentifierSingleQuoted(t){const n=this.currentToken;switch(t){case k.APOSTROPHE:{this.state=E.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case k.NULL:{this._err(z.unexpectedNullCharacter),n.publicId+=Ie;break}case k.GREATER_THAN_SIGN:{this._err(z.abruptDoctypePublicIdentifier),n.forceQuirks=!0,this.emitCurrentDoctype(n),this.state=E.DATA;break}case k.EOF:{this._err(z.eofInDoctype),n.forceQuirks=!0,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.publicId+=String.fromCodePoint(t)}}_stateAfterDoctypePublicIdentifier(t){const n=this.currentToken;switch(t){case k.SPACE:case k.LINE_FEED:case k.TABULATION:case k.FORM_FEED:{this.state=E.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;break}case k.GREATER_THAN_SIGN:{this.state=E.DATA,this.emitCurrentDoctype(n);break}case k.QUOTATION_MARK:{this._err(z.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),n.systemId="",this.state=E.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case k.APOSTROPHE:{this._err(z.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),n.systemId="",this.state=E.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case k.EOF:{this._err(z.eofInDoctype),n.forceQuirks=!0,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(z.missingQuoteBeforeDoctypeSystemIdentifier),n.forceQuirks=!0,this.state=E.BOGUS_DOCTYPE,this._stateBogusDoctype(t)}}_stateBetweenDoctypePublicAndSystemIdentifiers(t){const n=this.currentToken;switch(t){case k.SPACE:case k.LINE_FEED:case k.TABULATION:case k.FORM_FEED:break;case k.GREATER_THAN_SIGN:{this.emitCurrentDoctype(n),this.state=E.DATA;break}case k.QUOTATION_MARK:{n.systemId="",this.state=E.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case k.APOSTROPHE:{n.systemId="",this.state=E.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case k.EOF:{this._err(z.eofInDoctype),n.forceQuirks=!0,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(z.missingQuoteBeforeDoctypeSystemIdentifier),n.forceQuirks=!0,this.state=E.BOGUS_DOCTYPE,this._stateBogusDoctype(t)}}_stateAfterDoctypeSystemKeyword(t){const n=this.currentToken;switch(t){case k.SPACE:case k.LINE_FEED:case k.TABULATION:case k.FORM_FEED:{this.state=E.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;break}case k.QUOTATION_MARK:{this._err(z.missingWhitespaceAfterDoctypeSystemKeyword),n.systemId="",this.state=E.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case k.APOSTROPHE:{this._err(z.missingWhitespaceAfterDoctypeSystemKeyword),n.systemId="",this.state=E.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case k.GREATER_THAN_SIGN:{this._err(z.missingDoctypeSystemIdentifier),n.forceQuirks=!0,this.state=E.DATA,this.emitCurrentDoctype(n);break}case k.EOF:{this._err(z.eofInDoctype),n.forceQuirks=!0,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(z.missingQuoteBeforeDoctypeSystemIdentifier),n.forceQuirks=!0,this.state=E.BOGUS_DOCTYPE,this._stateBogusDoctype(t)}}_stateBeforeDoctypeSystemIdentifier(t){const n=this.currentToken;switch(t){case k.SPACE:case k.LINE_FEED:case k.TABULATION:case k.FORM_FEED:break;case k.QUOTATION_MARK:{n.systemId="",this.state=E.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case k.APOSTROPHE:{n.systemId="",this.state=E.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case k.GREATER_THAN_SIGN:{this._err(z.missingDoctypeSystemIdentifier),n.forceQuirks=!0,this.state=E.DATA,this.emitCurrentDoctype(n);break}case k.EOF:{this._err(z.eofInDoctype),n.forceQuirks=!0,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(z.missingQuoteBeforeDoctypeSystemIdentifier),n.forceQuirks=!0,this.state=E.BOGUS_DOCTYPE,this._stateBogusDoctype(t)}}_stateDoctypeSystemIdentifierDoubleQuoted(t){const n=this.currentToken;switch(t){case k.QUOTATION_MARK:{this.state=E.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case k.NULL:{this._err(z.unexpectedNullCharacter),n.systemId+=Ie;break}case k.GREATER_THAN_SIGN:{this._err(z.abruptDoctypeSystemIdentifier),n.forceQuirks=!0,this.emitCurrentDoctype(n),this.state=E.DATA;break}case k.EOF:{this._err(z.eofInDoctype),n.forceQuirks=!0,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.systemId+=String.fromCodePoint(t)}}_stateDoctypeSystemIdentifierSingleQuoted(t){const n=this.currentToken;switch(t){case k.APOSTROPHE:{this.state=E.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case k.NULL:{this._err(z.unexpectedNullCharacter),n.systemId+=Ie;break}case k.GREATER_THAN_SIGN:{this._err(z.abruptDoctypeSystemIdentifier),n.forceQuirks=!0,this.emitCurrentDoctype(n),this.state=E.DATA;break}case k.EOF:{this._err(z.eofInDoctype),n.forceQuirks=!0,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.systemId+=String.fromCodePoint(t)}}_stateAfterDoctypeSystemIdentifier(t){const n=this.currentToken;switch(t){case k.SPACE:case k.LINE_FEED:case k.TABULATION:case k.FORM_FEED:break;case k.GREATER_THAN_SIGN:{this.emitCurrentDoctype(n),this.state=E.DATA;break}case k.EOF:{this._err(z.eofInDoctype),n.forceQuirks=!0,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(z.unexpectedCharacterAfterDoctypeSystemIdentifier),this.state=E.BOGUS_DOCTYPE,this._stateBogusDoctype(t)}}_stateBogusDoctype(t){const n=this.currentToken;switch(t){case k.GREATER_THAN_SIGN:{this.emitCurrentDoctype(n),this.state=E.DATA;break}case k.NULL:{this._err(z.unexpectedNullCharacter);break}case k.EOF:{this.emitCurrentDoctype(n),this._emitEOFToken();break}}}_stateCdataSection(t){switch(t){case k.RIGHT_SQUARE_BRACKET:{this.state=E.CDATA_SECTION_BRACKET;break}case k.EOF:{this._err(z.eofInCdata),this._emitEOFToken();break}default:this._emitCodePoint(t)}}_stateCdataSectionBracket(t){t===k.RIGHT_SQUARE_BRACKET?this.state=E.CDATA_SECTION_END:(this._emitChars("]"),this.state=E.CDATA_SECTION,this._stateCdataSection(t))}_stateCdataSectionEnd(t){switch(t){case k.GREATER_THAN_SIGN:{this.state=E.DATA;break}case k.RIGHT_SQUARE_BRACKET:{this._emitChars("]");break}default:this._emitChars("]]"),this.state=E.CDATA_SECTION,this._stateCdataSection(t)}}_stateCharacterReference(){let t=this.entityDecoder.write(this.preprocessor.html,this.preprocessor.pos);if(t<0)if(this.preprocessor.lastChunkWritten)t=this.entityDecoder.end();else{this.active=!1,this.preprocessor.pos=this.preprocessor.html.length-1,this.consumedAfterSnapshot=0,this.preprocessor.endOfChunkHit=!0;return}t===0?(this.preprocessor.pos=this.entityStartPos,this._flushCodePointConsumedAsCharacterReference(k.AMPERSAND),this.state=!this._isCharacterReferenceInAttribute()&&dy(this.preprocessor.peek(1))?E.AMBIGUOUS_AMPERSAND:this.returnState):this.state=this.returnState}_stateAmbiguousAmpersand(t){dy(t)?this._flushCodePointConsumedAsCharacterReference(t):(t===k.SEMICOLON&&this._err(z.unknownNamedCharacterReference),this.state=this.returnState,this._callState(t))}}const gk=new Set([h.DD,h.DT,h.LI,h.OPTGROUP,h.OPTION,h.P,h.RB,h.RP,h.RT,h.RTC]),py=new Set([...gk,h.CAPTION,h.COLGROUP,h.TBODY,h.TD,h.TFOOT,h.TH,h.THEAD,h.TR]),bc=new Set([h.APPLET,h.CAPTION,h.HTML,h.MARQUEE,h.OBJECT,h.TABLE,h.TD,h.TEMPLATE,h.TH]),JR=new Set([...bc,h.OL,h.UL]),e8=new Set([...bc,h.BUTTON]),hy=new Set([h.ANNOTATION_XML,h.MI,h.MN,h.MO,h.MS,h.MTEXT]),fy=new Set([h.DESC,h.FOREIGN_OBJECT,h.TITLE]),t8=new Set([h.TR,h.TEMPLATE,h.HTML]),n8=new Set([h.TBODY,h.TFOOT,h.THEAD,h.TEMPLATE,h.HTML]),a8=new Set([h.TABLE,h.TEMPLATE,h.HTML]),i8=new Set([h.TD,h.TH]);class r8{get currentTmplContentOrNode(){return this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):this.current}constructor(t,n,a){this.treeAdapter=n,this.handler=a,this.items=[],this.tagIDs=[],this.stackTop=-1,this.tmplCount=0,this.currentTagId=h.UNKNOWN,this.current=t}_indexOf(t){return this.items.lastIndexOf(t,this.stackTop)}_isInTemplate(){return this.currentTagId===h.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===W.HTML}_updateCurrentElement(){this.current=this.items[this.stackTop],this.currentTagId=this.tagIDs[this.stackTop]}push(t,n){this.stackTop++,this.items[this.stackTop]=t,this.current=t,this.tagIDs[this.stackTop]=n,this.currentTagId=n,this._isInTemplate()&&this.tmplCount++,this.handler.onItemPush(t,n,!0)}pop(){const t=this.current;this.tmplCount>0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,!0)}replace(t,n){const a=this._indexOf(t);this.items[a]=n,a===this.stackTop&&(this.current=n)}insertAfter(t,n,a){const r=this._indexOf(t)+1;this.items.splice(r,0,n),this.tagIDs.splice(r,0,a),this.stackTop++,r===this.stackTop&&this._updateCurrentElement(),this.current&&this.currentTagId!==void 0&&this.handler.onItemPush(this.current,this.currentTagId,r===this.stackTop)}popUntilTagNamePopped(t){let n=this.stackTop+1;do n=this.tagIDs.lastIndexOf(t,n-1);while(n>0&&this.treeAdapter.getNamespaceURI(this.items[n])!==W.HTML);this.shortenToLength(Math.max(n,0))}shortenToLength(t){for(;this.stackTop>=t;){const n=this.current;this.tmplCount>0&&this._isInTemplate()&&(this.tmplCount-=1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(n,this.stackTop<t)}}popUntilElementPopped(t){const n=this._indexOf(t);this.shortenToLength(Math.max(n,0))}popUntilPopped(t,n){const a=this._indexOfTagNames(t,n);this.shortenToLength(Math.max(a,0))}popUntilNumberedHeaderPopped(){this.popUntilPopped(hp,W.HTML)}popUntilTableCellPopped(){this.popUntilPopped(i8,W.HTML)}popAllUpToHtmlElement(){this.tmplCount=0,this.shortenToLength(1)}_indexOfTagNames(t,n){for(let a=this.stackTop;a>=0;a--)if(t.has(this.tagIDs[a])&&this.treeAdapter.getNamespaceURI(this.items[a])===n)return a;return-1}clearBackTo(t,n){const a=this._indexOfTagNames(t,n);this.shortenToLength(a+1)}clearBackToTableContext(){this.clearBackTo(a8,W.HTML)}clearBackToTableBodyContext(){this.clearBackTo(n8,W.HTML)}clearBackToTableRowContext(){this.clearBackTo(t8,W.HTML)}remove(t){const n=this._indexOf(t);n>=0&&(n===this.stackTop?this.pop():(this.items.splice(n,1),this.tagIDs.splice(n,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,!1)))}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===h.BODY?this.items[1]:null}contains(t){return this._indexOf(t)>-1}getCommonAncestor(t){const n=this._indexOf(t)-1;return n>=0?this.items[n]:null}isRootHtmlElementCurrent(){return this.stackTop===0&&this.tagIDs[0]===h.HTML}hasInDynamicScope(t,n){for(let a=this.stackTop;a>=0;a--){const r=this.tagIDs[a];switch(this.treeAdapter.getNamespaceURI(this.items[a])){case W.HTML:{if(r===t)return!0;if(n.has(r))return!1;break}case W.SVG:{if(fy.has(r))return!1;break}case W.MATHML:{if(hy.has(r))return!1;break}}}return!0}hasInScope(t){return this.hasInDynamicScope(t,bc)}hasInListItemScope(t){return this.hasInDynamicScope(t,JR)}hasInButtonScope(t){return this.hasInDynamicScope(t,e8)}hasNumberedHeaderInScope(){for(let t=this.stackTop;t>=0;t--){const n=this.tagIDs[t];switch(this.treeAdapter.getNamespaceURI(this.items[t])){case W.HTML:{if(hp.has(n))return!0;if(bc.has(n))return!1;break}case W.SVG:{if(fy.has(n))return!1;break}case W.MATHML:{if(hy.has(n))return!1;break}}}return!0}hasInTableScope(t){for(let n=this.stackTop;n>=0;n--)if(this.treeAdapter.getNamespaceURI(this.items[n])===W.HTML)switch(this.tagIDs[n]){case t:return!0;case h.TABLE:case h.HTML:return!1}return!0}hasTableBodyContextInTableScope(){for(let t=this.stackTop;t>=0;t--)if(this.treeAdapter.getNamespaceURI(this.items[t])===W.HTML)switch(this.tagIDs[t]){case h.TBODY:case h.THEAD:case h.TFOOT:return!0;case h.TABLE:case h.HTML:return!1}return!0}hasInSelectScope(t){for(let n=this.stackTop;n>=0;n--)if(this.treeAdapter.getNamespaceURI(this.items[n])===W.HTML)switch(this.tagIDs[n]){case t:return!0;case h.OPTION:case h.OPTGROUP:break;default:return!1}return!0}generateImpliedEndTags(){for(;this.currentTagId!==void 0&&gk.has(this.currentTagId);)this.pop()}generateImpliedEndTagsThoroughly(){for(;this.currentTagId!==void 0&&py.has(this.currentTagId);)this.pop()}generateImpliedEndTagsWithExclusion(t){for(;this.currentTagId!==void 0&&this.currentTagId!==t&&py.has(this.currentTagId);)this.pop()}}const Ad=3;var Cn;(function(e){e[e.Marker=0]="Marker",e[e.Element=1]="Element"})(Cn||(Cn={}));const gy={type:Cn.Marker};class s8{constructor(t){this.treeAdapter=t,this.entries=[],this.bookmark=null}_getNoahArkConditionCandidates(t,n){const a=[],r=n.length,s=this.treeAdapter.getTagName(t),o=this.treeAdapter.getNamespaceURI(t);for(let l=0;l<this.entries.length;l++){const c=this.entries[l];if(c.type===Cn.Marker)break;const{element:u}=c;if(this.treeAdapter.getTagName(u)===s&&this.treeAdapter.getNamespaceURI(u)===o){const d=this.treeAdapter.getAttrList(u);d.length===r&&a.push({idx:l,attrs:d})}}return a}_ensureNoahArkCondition(t){if(this.entries.length<Ad)return;const n=this.treeAdapter.getAttrList(t),a=this._getNoahArkConditionCandidates(t,n);if(a.length<Ad)return;const r=new Map(n.map(o=>[o.name,o.value]));let s=0;for(let o=0;o<a.length;o++){const l=a[o];l.attrs.every(c=>r.get(c.name)===c.value)&&(s+=1,s>=Ad&&this.entries.splice(l.idx,1))}}insertMarker(){this.entries.unshift(gy)}pushElement(t,n){this._ensureNoahArkCondition(t),this.entries.unshift({type:Cn.Element,element:t,token:n})}insertElementAfterBookmark(t,n){const a=this.entries.indexOf(this.bookmark);this.entries.splice(a,0,{type:Cn.Element,element:t,token:n})}removeEntry(t){const n=this.entries.indexOf(t);n!==-1&&this.entries.splice(n,1)}clearToLastMarker(){const t=this.entries.indexOf(gy);t===-1?this.entries.length=0:this.entries.splice(0,t+1)}getElementEntryInScopeWithTagName(t){const n=this.entries.find(a=>a.type===Cn.Marker||this.treeAdapter.getTagName(a.element)===t);return n&&n.type===Cn.Element?n:null}getElementEntry(t){return this.entries.find(n=>n.type===Cn.Element&&n.element===t)}}const ua={createDocument(){return{nodeName:"#document",mode:$t.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return{nodeName:"#document-fragment",childNodes:[]}},createElement(e,t,n){return{nodeName:e,tagName:e,attrs:n,namespaceURI:t,childNodes:[],parentNode:null}},createCommentNode(e){return{nodeName:"#comment",data:e,parentNode:null}},createTextNode(e){return{nodeName:"#text",value:e,parentNode:null}},appendChild(e,t){e.childNodes.push(t),t.parentNode=e},insertBefore(e,t,n){const a=e.childNodes.indexOf(n);e.childNodes.splice(a,0,t),t.parentNode=e},setTemplateContent(e,t){e.content=t},getTemplateContent(e){return e.content},setDocumentType(e,t,n,a){const r=e.childNodes.find(s=>s.nodeName==="#documentType");if(r)r.name=t,r.publicId=n,r.systemId=a;else{const s={nodeName:"#documentType",name:t,publicId:n,systemId:a,parentNode:null};ua.appendChild(e,s)}},setDocumentMode(e,t){e.mode=t},getDocumentMode(e){return e.mode},detachNode(e){if(e.parentNode){const t=e.parentNode.childNodes.indexOf(e);e.parentNode.childNodes.splice(t,1),e.parentNode=null}},insertText(e,t){if(e.childNodes.length>0){const n=e.childNodes[e.childNodes.length-1];if(ua.isTextNode(n)){n.value+=t;return}}ua.appendChild(e,ua.createTextNode(t))},insertTextBefore(e,t,n){const a=e.childNodes[e.childNodes.indexOf(n)-1];a&&ua.isTextNode(a)?a.value+=t:ua.insertBefore(e,ua.createTextNode(t),n)},adoptAttributes(e,t){const n=new Set(e.attrs.map(a=>a.name));for(let a=0;a<t.length;a++)n.has(t[a].name)||e.attrs.push(t[a])},getFirstChild(e){return e.childNodes[0]},getChildNodes(e){return e.childNodes},getParentNode(e){return e.parentNode},getAttrList(e){return e.attrs},getTagName(e){return e.tagName},getNamespaceURI(e){return e.namespaceURI},getTextNodeContent(e){return e.value},getCommentNodeContent(e){return e.data},getDocumentTypeNodeName(e){return e.name},getDocumentTypeNodePublicId(e){return e.publicId},getDocumentTypeNodeSystemId(e){return e.systemId},isTextNode(e){return e.nodeName==="#text"},isCommentNode(e){return e.nodeName==="#comment"},isDocumentTypeNode(e){return e.nodeName==="#documentType"},isElementNode(e){return Object.prototype.hasOwnProperty.call(e,"tagName")},setNodeSourceCodeLocation(e,t){e.sourceCodeLocation=t},getNodeSourceCodeLocation(e){return e.sourceCodeLocation},updateNodeSourceCodeLocation(e,t){e.sourceCodeLocation={...e.sourceCodeLocation,...t}}},xk="html",o8="about:legacy-compat",l8="http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd",yk=["+//silmaril//dtd html pro v0r11 19970101//","-//as//dtd html 3.0 aswedit + extensions//","-//advasoft ltd//dtd html 3.0 aswedit + extensions//","-//ietf//dtd html 2.0 level 1//","-//ietf//dtd html 2.0 level 2//","-//ietf//dtd html 2.0 strict level 1//","-//ietf//dtd html 2.0 strict level 2//","-//ietf//dtd html 2.0 strict//","-//ietf//dtd html 2.0//","-//ietf//dtd html 2.1e//","-//ietf//dtd html 3.0//","-//ietf//dtd html 3.2 final//","-//ietf//dtd html 3.2//","-//ietf//dtd html 3//","-//ietf//dtd html level 0//","-//ietf//dtd html level 1//","-//ietf//dtd html level 2//","-//ietf//dtd html level 3//","-//ietf//dtd html strict level 0//","-//ietf//dtd html strict level 1//","-//ietf//dtd html strict level 2//","-//ietf//dtd html strict level 3//","-//ietf//dtd html strict//","-//ietf//dtd html//","-//metrius//dtd metrius presentational//","-//microsoft//dtd internet explorer 2.0 html strict//","-//microsoft//dtd internet explorer 2.0 html//","-//microsoft//dtd internet explorer 2.0 tables//","-//microsoft//dtd internet explorer 3.0 html strict//","-//microsoft//dtd internet explorer 3.0 html//","-//microsoft//dtd internet explorer 3.0 tables//","-//netscape comm. corp.//dtd html//","-//netscape comm. corp.//dtd strict html//","-//o'reilly and associates//dtd html 2.0//","-//o'reilly and associates//dtd html extended 1.0//","-//o'reilly and associates//dtd html extended relaxed 1.0//","-//sq//dtd html 2.0 hotmetal + extensions//","-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//","-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//","-//spyglass//dtd html 2.0 extended//","-//sun microsystems corp.//dtd hotjava html//","-//sun microsystems corp.//dtd hotjava strict html//","-//w3c//dtd html 3 1995-03-24//","-//w3c//dtd html 3.2 draft//","-//w3c//dtd html 3.2 final//","-//w3c//dtd html 3.2//","-//w3c//dtd html 3.2s draft//","-//w3c//dtd html 4.0 frameset//","-//w3c//dtd html 4.0 transitional//","-//w3c//dtd html experimental 19960712//","-//w3c//dtd html experimental 970421//","-//w3c//dtd w3 html//","-//w3o//dtd w3 html 3.0//","-//webtechs//dtd mozilla html 2.0//","-//webtechs//dtd mozilla html//"],c8=[...yk,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],u8=new Set(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"]),bk=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],d8=[...bk,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"];function xy(e,t){return t.some(n=>e.startsWith(n))}function m8(e){return e.name===xk&&e.publicId===null&&(e.systemId===null||e.systemId===o8)}function p8(e){if(e.name!==xk)return $t.QUIRKS;const{systemId:t}=e;if(t&&t.toLowerCase()===l8)return $t.QUIRKS;let{publicId:n}=e;if(n!==null){if(n=n.toLowerCase(),u8.has(n))return $t.QUIRKS;let a=t===null?c8:yk;if(xy(n,a))return $t.QUIRKS;if(a=t===null?bk:d8,xy(n,a))return $t.LIMITED_QUIRKS}return $t.NO_QUIRKS}const yy={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},h8="definitionurl",f8="definitionURL",g8=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map(e=>[e.toLowerCase(),e])),x8=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:W.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:W.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:W.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:W.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:W.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:W.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:W.XLINK}],["xml:lang",{prefix:"xml",name:"lang",namespace:W.XML}],["xml:space",{prefix:"xml",name:"space",namespace:W.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:W.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:W.XMLNS}]]),y8=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map(e=>[e.toLowerCase(),e])),b8=new Set([h.B,h.BIG,h.BLOCKQUOTE,h.BODY,h.BR,h.CENTER,h.CODE,h.DD,h.DIV,h.DL,h.DT,h.EM,h.EMBED,h.H1,h.H2,h.H3,h.H4,h.H5,h.H6,h.HEAD,h.HR,h.I,h.IMG,h.LI,h.LISTING,h.MENU,h.META,h.NOBR,h.OL,h.P,h.PRE,h.RUBY,h.S,h.SMALL,h.SPAN,h.STRONG,h.STRIKE,h.SUB,h.SUP,h.TABLE,h.TT,h.U,h.UL,h.VAR]);function v8(e){const t=e.tagID;return t===h.FONT&&e.attrs.some(({name:a})=>a===ci.COLOR||a===ci.SIZE||a===ci.FACE)||b8.has(t)}function vk(e){for(let t=0;t<e.attrs.length;t++)if(e.attrs[t].name===h8){e.attrs[t].name=f8;break}}function wk(e){for(let t=0;t<e.attrs.length;t++){const n=g8.get(e.attrs[t].name);n!=null&&(e.attrs[t].name=n)}}function hf(e){for(let t=0;t<e.attrs.length;t++){const n=x8.get(e.attrs[t].name);n&&(e.attrs[t].prefix=n.prefix,e.attrs[t].name=n.name,e.attrs[t].namespace=n.namespace)}}function w8(e){const t=y8.get(e.tagName);t!=null&&(e.tagName=t,e.tagID=Sr(e.tagName))}function k8(e,t){return t===W.MATHML&&(e===h.MI||e===h.MO||e===h.MN||e===h.MS||e===h.MTEXT)}function A8(e,t,n){if(t===W.MATHML&&e===h.ANNOTATION_XML){for(let a=0;a<n.length;a++)if(n[a].name===ci.ENCODING){const r=n[a].value.toLowerCase();return r===yy.TEXT_HTML||r===yy.APPLICATION_XML}}return t===W.SVG&&(e===h.FOREIGN_OBJECT||e===h.DESC||e===h.TITLE)}function C8(e,t,n,a){return(!a||a===W.HTML)&&A8(e,t,n)||(!a||a===W.MATHML)&&k8(e,t)}const E8="hidden",N8=8,T8=3;var S;(function(e){e[e.INITIAL=0]="INITIAL",e[e.BEFORE_HTML=1]="BEFORE_HTML",e[e.BEFORE_HEAD=2]="BEFORE_HEAD",e[e.IN_HEAD=3]="IN_HEAD",e[e.IN_HEAD_NO_SCRIPT=4]="IN_HEAD_NO_SCRIPT",e[e.AFTER_HEAD=5]="AFTER_HEAD",e[e.IN_BODY=6]="IN_BODY",e[e.TEXT=7]="TEXT",e[e.IN_TABLE=8]="IN_TABLE",e[e.IN_TABLE_TEXT=9]="IN_TABLE_TEXT",e[e.IN_CAPTION=10]="IN_CAPTION",e[e.IN_COLUMN_GROUP=11]="IN_COLUMN_GROUP",e[e.IN_TABLE_BODY=12]="IN_TABLE_BODY",e[e.IN_ROW=13]="IN_ROW",e[e.IN_CELL=14]="IN_CELL",e[e.IN_SELECT=15]="IN_SELECT",e[e.IN_SELECT_IN_TABLE=16]="IN_SELECT_IN_TABLE",e[e.IN_TEMPLATE=17]="IN_TEMPLATE",e[e.AFTER_BODY=18]="AFTER_BODY",e[e.IN_FRAMESET=19]="IN_FRAMESET",e[e.AFTER_FRAMESET=20]="AFTER_FRAMESET",e[e.AFTER_AFTER_BODY=21]="AFTER_AFTER_BODY",e[e.AFTER_AFTER_FRAMESET=22]="AFTER_AFTER_FRAMESET"})(S||(S={}));const S8={startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1},kk=new Set([h.TABLE,h.TBODY,h.TFOOT,h.THEAD,h.TR]),by={scriptingEnabled:!0,sourceCodeLocationInfo:!1,treeAdapter:ua,onParseError:null};class vy{constructor(t,n,a=null,r=null){this.fragmentContext=a,this.scriptHandler=r,this.currentToken=null,this.stopped=!1,this.insertionMode=S.INITIAL,this.originalInsertionMode=S.INITIAL,this.headElement=null,this.formElement=null,this.currentNotInHTML=!1,this.tmplInsertionModeStack=[],this.pendingCharacterTokens=[],this.hasNonWhitespacePendingCharacterToken=!1,this.framesetOk=!0,this.skipNextNewLine=!1,this.fosterParentingEnabled=!1,this.options={...by,...t},this.treeAdapter=this.options.treeAdapter,this.onParseError=this.options.onParseError,this.onParseError&&(this.options.sourceCodeLocationInfo=!0),this.document=n??this.treeAdapter.createDocument(),this.tokenizer=new ZR(this.options,this),this.activeFormattingElements=new s8(this.treeAdapter),this.fragmentContextID=a?Sr(this.treeAdapter.getTagName(a)):h.UNKNOWN,this._setContextModes(a??this.document,this.fragmentContextID),this.openElements=new r8(this.document,this.treeAdapter,this)}static parse(t,n){const a=new this(n);return a.tokenizer.write(t,!0),a.document}static getFragmentParser(t,n){const a={...by,...n};t??(t=a.treeAdapter.createElement(_.TEMPLATE,W.HTML,[]));const r=a.treeAdapter.createElement("documentmock",W.HTML,[]),s=new this(a,r,t);return s.fragmentContextID===h.TEMPLATE&&s.tmplInsertionModeStack.unshift(S.IN_TEMPLATE),s._initTokenizerForFragmentParsing(),s._insertFakeRootElement(),s._resetInsertionMode(),s._findFormInFragmentContext(),s}getFragment(){const t=this.treeAdapter.getFirstChild(this.document),n=this.treeAdapter.createDocumentFragment();return this._adoptNodes(t,n),n}_err(t,n,a){var r;if(!this.onParseError)return;const s=(r=t.location)!==null&&r!==void 0?r:S8,o={code:n,startLine:s.startLine,startCol:s.startCol,startOffset:s.startOffset,endLine:a?s.startLine:s.endLine,endCol:a?s.startCol:s.endCol,endOffset:a?s.startOffset:s.endOffset};this.onParseError(o)}onItemPush(t,n,a){var r,s;(s=(r=this.treeAdapter).onItemPush)===null||s===void 0||s.call(r,t),a&&this.openElements.stackTop>0&&this._setContextModes(t,n)}onItemPop(t,n){var a,r;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(t,this.currentToken),(r=(a=this.treeAdapter).onItemPop)===null||r===void 0||r.call(a,t,this.openElements.current),n){let s,o;this.openElements.stackTop===0&&this.fragmentContext?(s=this.fragmentContext,o=this.fragmentContextID):{current:s,currentTagId:o}=this.openElements,this._setContextModes(s,o)}}_setContextModes(t,n){const a=t===this.document||t&&this.treeAdapter.getNamespaceURI(t)===W.HTML;this.currentNotInHTML=!a,this.tokenizer.inForeignNode=!a&&t!==void 0&&n!==void 0&&!this._isIntegrationPoint(n,t)}_switchToTextParsing(t,n){this._insertElement(t,W.HTML),this.tokenizer.state=n,this.originalInsertionMode=this.insertionMode,this.insertionMode=S.TEXT}switchToPlaintextParsing(){this.insertionMode=S.TEXT,this.originalInsertionMode=S.IN_BODY,this.tokenizer.state=Le.PLAINTEXT}_getAdjustedCurrentElement(){return this.openElements.stackTop===0&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let t=this.fragmentContext;for(;t;){if(this.treeAdapter.getTagName(t)===_.FORM){this.formElement=t;break}t=this.treeAdapter.getParentNode(t)}}_initTokenizerForFragmentParsing(){if(!(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==W.HTML))switch(this.fragmentContextID){case h.TITLE:case h.TEXTAREA:{this.tokenizer.state=Le.RCDATA;break}case h.STYLE:case h.XMP:case h.IFRAME:case h.NOEMBED:case h.NOFRAMES:case h.NOSCRIPT:{this.tokenizer.state=Le.RAWTEXT;break}case h.SCRIPT:{this.tokenizer.state=Le.SCRIPT_DATA;break}case h.PLAINTEXT:{this.tokenizer.state=Le.PLAINTEXT;break}}}_setDocumentType(t){const n=t.name||"",a=t.publicId||"",r=t.systemId||"";if(this.treeAdapter.setDocumentType(this.document,n,a,r),t.location){const o=this.treeAdapter.getChildNodes(this.document).find(l=>this.treeAdapter.isDocumentTypeNode(l));o&&this.treeAdapter.setNodeSourceCodeLocation(o,t.location)}}_attachElementToTree(t,n){if(this.options.sourceCodeLocationInfo){const a=n&&{...n,startTag:n};this.treeAdapter.setNodeSourceCodeLocation(t,a)}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(t);else{const a=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(a??this.document,t)}}_appendElement(t,n){const a=this.treeAdapter.createElement(t.tagName,n,t.attrs);this._attachElementToTree(a,t.location)}_insertElement(t,n){const a=this.treeAdapter.createElement(t.tagName,n,t.attrs);this._attachElementToTree(a,t.location),this.openElements.push(a,t.tagID)}_insertFakeElement(t,n){const a=this.treeAdapter.createElement(t,W.HTML,[]);this._attachElementToTree(a,null),this.openElements.push(a,n)}_insertTemplate(t){const n=this.treeAdapter.createElement(t.tagName,W.HTML,t.attrs),a=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(n,a),this._attachElementToTree(n,t.location),this.openElements.push(n,t.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(a,null)}_insertFakeRootElement(){const t=this.treeAdapter.createElement(_.HTML,W.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(t,null),this.treeAdapter.appendChild(this.openElements.current,t),this.openElements.push(t,h.HTML)}_appendCommentNode(t,n){const a=this.treeAdapter.createCommentNode(t.data);this.treeAdapter.appendChild(n,a),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(a,t.location)}_insertCharacters(t){let n,a;if(this._shouldFosterParentOnInsertion()?({parent:n,beforeElement:a}=this._findFosterParentingLocation(),a?this.treeAdapter.insertTextBefore(n,t.chars,a):this.treeAdapter.insertText(n,t.chars)):(n=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(n,t.chars)),!t.location)return;const r=this.treeAdapter.getChildNodes(n),s=a?r.lastIndexOf(a):r.length,o=r[s-1];if(this.treeAdapter.getNodeSourceCodeLocation(o)){const{endLine:c,endCol:u,endOffset:d}=t.location;this.treeAdapter.updateNodeSourceCodeLocation(o,{endLine:c,endCol:u,endOffset:d})}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(o,t.location)}_adoptNodes(t,n){for(let a=this.treeAdapter.getFirstChild(t);a;a=this.treeAdapter.getFirstChild(t))this.treeAdapter.detachNode(a),this.treeAdapter.appendChild(n,a)}_setEndLocation(t,n){if(this.treeAdapter.getNodeSourceCodeLocation(t)&&n.location){const a=n.location,r=this.treeAdapter.getTagName(t),s=n.type===le.END_TAG&&r===n.tagName?{endTag:{...a},endLine:a.endLine,endCol:a.endCol,endOffset:a.endOffset}:{endLine:a.startLine,endCol:a.startCol,endOffset:a.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(t,s)}}shouldProcessStartTagTokenInForeignContent(t){if(!this.currentNotInHTML)return!1;let n,a;return this.openElements.stackTop===0&&this.fragmentContext?(n=this.fragmentContext,a=this.fragmentContextID):{current:n,currentTagId:a}=this.openElements,t.tagID===h.SVG&&this.treeAdapter.getTagName(n)===_.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(n)===W.MATHML?!1:this.tokenizer.inForeignNode||(t.tagID===h.MGLYPH||t.tagID===h.MALIGNMARK)&&a!==void 0&&!this._isIntegrationPoint(a,n,W.HTML)}_processToken(t){switch(t.type){case le.CHARACTER:{this.onCharacter(t);break}case le.NULL_CHARACTER:{this.onNullCharacter(t);break}case le.COMMENT:{this.onComment(t);break}case le.DOCTYPE:{this.onDoctype(t);break}case le.START_TAG:{this._processStartTag(t);break}case le.END_TAG:{this.onEndTag(t);break}case le.EOF:{this.onEof(t);break}case le.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(t);break}}}_isIntegrationPoint(t,n,a){const r=this.treeAdapter.getNamespaceURI(n),s=this.treeAdapter.getAttrList(n);return C8(t,r,s,a)}_reconstructActiveFormattingElements(){const t=this.activeFormattingElements.entries.length;if(t){const n=this.activeFormattingElements.entries.findIndex(r=>r.type===Cn.Marker||this.openElements.contains(r.element)),a=n===-1?t-1:n-1;for(let r=a;r>=0;r--){const s=this.activeFormattingElements.entries[r];this._insertElement(s.token,this.treeAdapter.getNamespaceURI(s.element)),s.element=this.openElements.current}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=S.IN_ROW}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(h.P),this.openElements.popUntilTagNamePopped(h.P)}_resetInsertionMode(){for(let t=this.openElements.stackTop;t>=0;t--)switch(t===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[t]){case h.TR:{this.insertionMode=S.IN_ROW;return}case h.TBODY:case h.THEAD:case h.TFOOT:{this.insertionMode=S.IN_TABLE_BODY;return}case h.CAPTION:{this.insertionMode=S.IN_CAPTION;return}case h.COLGROUP:{this.insertionMode=S.IN_COLUMN_GROUP;return}case h.TABLE:{this.insertionMode=S.IN_TABLE;return}case h.BODY:{this.insertionMode=S.IN_BODY;return}case h.FRAMESET:{this.insertionMode=S.IN_FRAMESET;return}case h.SELECT:{this._resetInsertionModeForSelect(t);return}case h.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case h.HTML:{this.insertionMode=this.headElement?S.AFTER_HEAD:S.BEFORE_HEAD;return}case h.TD:case h.TH:{if(t>0){this.insertionMode=S.IN_CELL;return}break}case h.HEAD:{if(t>0){this.insertionMode=S.IN_HEAD;return}break}}this.insertionMode=S.IN_BODY}_resetInsertionModeForSelect(t){if(t>0)for(let n=t-1;n>0;n--){const a=this.openElements.tagIDs[n];if(a===h.TEMPLATE)break;if(a===h.TABLE){this.insertionMode=S.IN_SELECT_IN_TABLE;return}}this.insertionMode=S.IN_SELECT}_isElementCausesFosterParenting(t){return kk.has(t)}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this.openElements.currentTagId!==void 0&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}_findFosterParentingLocation(){for(let t=this.openElements.stackTop;t>=0;t--){const n=this.openElements.items[t];switch(this.openElements.tagIDs[t]){case h.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(n)===W.HTML)return{parent:this.treeAdapter.getTemplateContent(n),beforeElement:null};break}case h.TABLE:{const a=this.treeAdapter.getParentNode(n);return a?{parent:a,beforeElement:n}:{parent:this.openElements.items[t-1],beforeElement:null}}}}return{parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(t){const n=this._findFosterParentingLocation();n.beforeElement?this.treeAdapter.insertBefore(n.parent,t,n.beforeElement):this.treeAdapter.appendChild(n.parent,t)}_isSpecialElement(t,n){const a=this.treeAdapter.getNamespaceURI(t);return GR[a].has(n)}onCharacter(t){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){i_(this,t);return}switch(this.insertionMode){case S.INITIAL:{$r(this,t);break}case S.BEFORE_HTML:{vs(this,t);break}case S.BEFORE_HEAD:{ws(this,t);break}case S.IN_HEAD:{ks(this,t);break}case S.IN_HEAD_NO_SCRIPT:{As(this,t);break}case S.AFTER_HEAD:{Cs(this,t);break}case S.IN_BODY:case S.IN_CAPTION:case S.IN_CELL:case S.IN_TEMPLATE:{Ck(this,t);break}case S.TEXT:case S.IN_SELECT:case S.IN_SELECT_IN_TABLE:{this._insertCharacters(t);break}case S.IN_TABLE:case S.IN_TABLE_BODY:case S.IN_ROW:{Cd(this,t);break}case S.IN_TABLE_TEXT:{jk(this,t);break}case S.IN_COLUMN_GROUP:{vc(this,t);break}case S.AFTER_BODY:{wc(this,t);break}case S.AFTER_AFTER_BODY:{Pl(this,t);break}}}onNullCharacter(t){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){a_(this,t);return}switch(this.insertionMode){case S.INITIAL:{$r(this,t);break}case S.BEFORE_HTML:{vs(this,t);break}case S.BEFORE_HEAD:{ws(this,t);break}case S.IN_HEAD:{ks(this,t);break}case S.IN_HEAD_NO_SCRIPT:{As(this,t);break}case S.AFTER_HEAD:{Cs(this,t);break}case S.TEXT:{this._insertCharacters(t);break}case S.IN_TABLE:case S.IN_TABLE_BODY:case S.IN_ROW:{Cd(this,t);break}case S.IN_COLUMN_GROUP:{vc(this,t);break}case S.AFTER_BODY:{wc(this,t);break}case S.AFTER_AFTER_BODY:{Pl(this,t);break}}}onComment(t){if(this.skipNextNewLine=!1,this.currentNotInHTML){fp(this,t);return}switch(this.insertionMode){case S.INITIAL:case S.BEFORE_HTML:case S.BEFORE_HEAD:case S.IN_HEAD:case S.IN_HEAD_NO_SCRIPT:case S.AFTER_HEAD:case S.IN_BODY:case S.IN_TABLE:case S.IN_CAPTION:case S.IN_COLUMN_GROUP:case S.IN_TABLE_BODY:case S.IN_ROW:case S.IN_CELL:case S.IN_SELECT:case S.IN_SELECT_IN_TABLE:case S.IN_TEMPLATE:case S.IN_FRAMESET:case S.AFTER_FRAMESET:{fp(this,t);break}case S.IN_TABLE_TEXT:{Yr(this,t);break}case S.AFTER_BODY:{O8(this,t);break}case S.AFTER_AFTER_BODY:case S.AFTER_AFTER_FRAMESET:{_8(this,t);break}}}onDoctype(t){switch(this.skipNextNewLine=!1,this.insertionMode){case S.INITIAL:{L8(this,t);break}case S.BEFORE_HEAD:case S.IN_HEAD:case S.IN_HEAD_NO_SCRIPT:case S.AFTER_HEAD:{this._err(t,z.misplacedDoctype);break}case S.IN_TABLE_TEXT:{Yr(this,t);break}}}onStartTag(t){this.skipNextNewLine=!1,this.currentToken=t,this._processStartTag(t),t.selfClosing&&!t.ackSelfClosing&&this._err(t,z.nonVoidHtmlElementStartTagWithTrailingSolidus)}_processStartTag(t){this.shouldProcessStartTagTokenInForeignContent(t)?r_(this,t):this._startTagOutsideForeignContent(t)}_startTagOutsideForeignContent(t){switch(this.insertionMode){case S.INITIAL:{$r(this,t);break}case S.BEFORE_HTML:{z8(this,t);break}case S.BEFORE_HEAD:{B8(this,t);break}case S.IN_HEAD:{yn(this,t);break}case S.IN_HEAD_NO_SCRIPT:{U8(this,t);break}case S.AFTER_HEAD:{W8(this,t);break}case S.IN_BODY:{mt(this,t);break}case S.IN_TABLE:{fr(this,t);break}case S.IN_TABLE_TEXT:{Yr(this,t);break}case S.IN_CAPTION:{FO(this,t);break}case S.IN_COLUMN_GROUP:{xf(this,t);break}case S.IN_TABLE_BODY:{yu(this,t);break}case S.IN_ROW:{bu(this,t);break}case S.IN_CELL:{VO(this,t);break}case S.IN_SELECT:{Dk(this,t);break}case S.IN_SELECT_IN_TABLE:{$O(this,t);break}case S.IN_TEMPLATE:{GO(this,t);break}case S.AFTER_BODY:{KO(this,t);break}case S.IN_FRAMESET:{XO(this,t);break}case S.AFTER_FRAMESET:{JO(this,t);break}case S.AFTER_AFTER_BODY:{t_(this,t);break}case S.AFTER_AFTER_FRAMESET:{n_(this,t);break}}}onEndTag(t){this.skipNextNewLine=!1,this.currentToken=t,this.currentNotInHTML?s_(this,t):this._endTagOutsideForeignContent(t)}_endTagOutsideForeignContent(t){switch(this.insertionMode){case S.INITIAL:{$r(this,t);break}case S.BEFORE_HTML:{q8(this,t);break}case S.BEFORE_HEAD:{F8(this,t);break}case S.IN_HEAD:{H8(this,t);break}case S.IN_HEAD_NO_SCRIPT:{V8(this,t);break}case S.AFTER_HEAD:{$8(this,t);break}case S.IN_BODY:{xu(this,t);break}case S.TEXT:{PO(this,t);break}case S.IN_TABLE:{Zs(this,t);break}case S.IN_TABLE_TEXT:{Yr(this,t);break}case S.IN_CAPTION:{HO(this,t);break}case S.IN_COLUMN_GROUP:{UO(this,t);break}case S.IN_TABLE_BODY:{gp(this,t);break}case S.IN_ROW:{Mk(this,t);break}case S.IN_CELL:{WO(this,t);break}case S.IN_SELECT:{Rk(this,t);break}case S.IN_SELECT_IN_TABLE:{YO(this,t);break}case S.IN_TEMPLATE:{QO(this,t);break}case S.AFTER_BODY:{_k(this,t);break}case S.IN_FRAMESET:{ZO(this,t);break}case S.AFTER_FRAMESET:{e_(this,t);break}case S.AFTER_AFTER_BODY:{Pl(this,t);break}}}onEof(t){switch(this.insertionMode){case S.INITIAL:{$r(this,t);break}case S.BEFORE_HTML:{vs(this,t);break}case S.BEFORE_HEAD:{ws(this,t);break}case S.IN_HEAD:{ks(this,t);break}case S.IN_HEAD_NO_SCRIPT:{As(this,t);break}case S.AFTER_HEAD:{Cs(this,t);break}case S.IN_BODY:case S.IN_TABLE:case S.IN_CAPTION:case S.IN_COLUMN_GROUP:case S.IN_TABLE_BODY:case S.IN_ROW:case S.IN_CELL:case S.IN_SELECT:case S.IN_SELECT_IN_TABLE:{Sk(this,t);break}case S.TEXT:{MO(this,t);break}case S.IN_TABLE_TEXT:{Yr(this,t);break}case S.IN_TEMPLATE:{Ok(this,t);break}case S.AFTER_BODY:case S.IN_FRAMESET:case S.AFTER_FRAMESET:case S.AFTER_AFTER_BODY:case S.AFTER_AFTER_FRAMESET:{gf(this,t);break}}}onWhitespaceCharacter(t){if(this.skipNextNewLine&&(this.skipNextNewLine=!1,t.chars.charCodeAt(0)===k.LINE_FEED)){if(t.chars.length===1)return;t.chars=t.chars.substr(1)}if(this.tokenizer.inForeignNode){this._insertCharacters(t);return}switch(this.insertionMode){case S.IN_HEAD:case S.IN_HEAD_NO_SCRIPT:case S.AFTER_HEAD:case S.TEXT:case S.IN_COLUMN_GROUP:case S.IN_SELECT:case S.IN_SELECT_IN_TABLE:case S.IN_FRAMESET:case S.AFTER_FRAMESET:{this._insertCharacters(t);break}case S.IN_BODY:case S.IN_CAPTION:case S.IN_CELL:case S.IN_TEMPLATE:case S.AFTER_BODY:case S.AFTER_AFTER_BODY:case S.AFTER_AFTER_FRAMESET:{Ak(this,t);break}case S.IN_TABLE:case S.IN_TABLE_BODY:case S.IN_ROW:{Cd(this,t);break}case S.IN_TABLE_TEXT:{Ik(this,t);break}}}}function I8(e,t){let n=e.activeFormattingElements.getElementEntryInScopeWithTagName(t.tagName);return n?e.openElements.contains(n.element)?e.openElements.hasInScope(t.tagID)||(n=null):(e.activeFormattingElements.removeEntry(n),n=null):Tk(e,t),n}function j8(e,t){let n=null,a=e.openElements.stackTop;for(;a>=0;a--){const r=e.openElements.items[a];if(r===t.element)break;e._isSpecialElement(r,e.openElements.tagIDs[a])&&(n=r)}return n||(e.openElements.shortenToLength(Math.max(a,0)),e.activeFormattingElements.removeEntry(t)),n}function P8(e,t,n){let a=t,r=e.openElements.getCommonAncestor(t);for(let s=0,o=r;o!==n;s++,o=r){r=e.openElements.getCommonAncestor(o);const l=e.activeFormattingElements.getElementEntry(o),c=l&&s>=T8;!l||c?(c&&e.activeFormattingElements.removeEntry(l),e.openElements.remove(o)):(o=M8(e,l),a===t&&(e.activeFormattingElements.bookmark=l),e.treeAdapter.detachNode(a),e.treeAdapter.appendChild(o,a),a=o)}return a}function M8(e,t){const n=e.treeAdapter.getNamespaceURI(t.element),a=e.treeAdapter.createElement(t.token.tagName,n,t.token.attrs);return e.openElements.replace(t.element,a),t.element=a,a}function D8(e,t,n){const a=e.treeAdapter.getTagName(t),r=Sr(a);if(e._isElementCausesFosterParenting(r))e._fosterParentElement(n);else{const s=e.treeAdapter.getNamespaceURI(t);r===h.TEMPLATE&&s===W.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,n)}}function R8(e,t,n){const a=e.treeAdapter.getNamespaceURI(n.element),{token:r}=n,s=e.treeAdapter.createElement(r.tagName,a,r.attrs);e._adoptNodes(t,s),e.treeAdapter.appendChild(t,s),e.activeFormattingElements.insertElementAfterBookmark(s,r),e.activeFormattingElements.removeEntry(n),e.openElements.remove(n.element),e.openElements.insertAfter(t,s,r.tagID)}function ff(e,t){for(let n=0;n<N8;n++){const a=I8(e,t);if(!a)break;const r=j8(e,a);if(!r)break;e.activeFormattingElements.bookmark=a;const s=P8(e,r,a.element),o=e.openElements.getCommonAncestor(a.element);e.treeAdapter.detachNode(s),o&&D8(e,o,s),R8(e,r,a)}}function fp(e,t){e._appendCommentNode(t,e.openElements.currentTmplContentOrNode)}function O8(e,t){e._appendCommentNode(t,e.openElements.items[0])}function _8(e,t){e._appendCommentNode(t,e.document)}function gf(e,t){if(e.stopped=!0,t.location){const n=e.fragmentContext?0:2;for(let a=e.openElements.stackTop;a>=n;a--)e._setEndLocation(e.openElements.items[a],t);if(!e.fragmentContext&&e.openElements.stackTop>=0){const a=e.openElements.items[0],r=e.treeAdapter.getNodeSourceCodeLocation(a);if(r&&!r.endTag&&(e._setEndLocation(a,t),e.openElements.stackTop>=1)){const s=e.openElements.items[1],o=e.treeAdapter.getNodeSourceCodeLocation(s);o&&!o.endTag&&e._setEndLocation(s,t)}}}}function L8(e,t){e._setDocumentType(t);const n=t.forceQuirks?$t.QUIRKS:p8(t);m8(t)||e._err(t,z.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,n),e.insertionMode=S.BEFORE_HTML}function $r(e,t){e._err(t,z.missingDoctype,!0),e.treeAdapter.setDocumentMode(e.document,$t.QUIRKS),e.insertionMode=S.BEFORE_HTML,e._processToken(t)}function z8(e,t){t.tagID===h.HTML?(e._insertElement(t,W.HTML),e.insertionMode=S.BEFORE_HEAD):vs(e,t)}function q8(e,t){const n=t.tagID;(n===h.HTML||n===h.HEAD||n===h.BODY||n===h.BR)&&vs(e,t)}function vs(e,t){e._insertFakeRootElement(),e.insertionMode=S.BEFORE_HEAD,e._processToken(t)}function B8(e,t){switch(t.tagID){case h.HTML:{mt(e,t);break}case h.HEAD:{e._insertElement(t,W.HTML),e.headElement=e.openElements.current,e.insertionMode=S.IN_HEAD;break}default:ws(e,t)}}function F8(e,t){const n=t.tagID;n===h.HEAD||n===h.BODY||n===h.HTML||n===h.BR?ws(e,t):e._err(t,z.endTagWithoutMatchingOpenElement)}function ws(e,t){e._insertFakeElement(_.HEAD,h.HEAD),e.headElement=e.openElements.current,e.insertionMode=S.IN_HEAD,e._processToken(t)}function yn(e,t){switch(t.tagID){case h.HTML:{mt(e,t);break}case h.BASE:case h.BASEFONT:case h.BGSOUND:case h.LINK:case h.META:{e._appendElement(t,W.HTML),t.ackSelfClosing=!0;break}case h.TITLE:{e._switchToTextParsing(t,Le.RCDATA);break}case h.NOSCRIPT:{e.options.scriptingEnabled?e._switchToTextParsing(t,Le.RAWTEXT):(e._insertElement(t,W.HTML),e.insertionMode=S.IN_HEAD_NO_SCRIPT);break}case h.NOFRAMES:case h.STYLE:{e._switchToTextParsing(t,Le.RAWTEXT);break}case h.SCRIPT:{e._switchToTextParsing(t,Le.SCRIPT_DATA);break}case h.TEMPLATE:{e._insertTemplate(t),e.activeFormattingElements.insertMarker(),e.framesetOk=!1,e.insertionMode=S.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(S.IN_TEMPLATE);break}case h.HEAD:{e._err(t,z.misplacedStartTagForHeadElement);break}default:ks(e,t)}}function H8(e,t){switch(t.tagID){case h.HEAD:{e.openElements.pop(),e.insertionMode=S.AFTER_HEAD;break}case h.BODY:case h.BR:case h.HTML:{ks(e,t);break}case h.TEMPLATE:{ki(e,t);break}default:e._err(t,z.endTagWithoutMatchingOpenElement)}}function ki(e,t){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==h.TEMPLATE&&e._err(t,z.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(h.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(t,z.endTagWithoutMatchingOpenElement)}function ks(e,t){e.openElements.pop(),e.insertionMode=S.AFTER_HEAD,e._processToken(t)}function U8(e,t){switch(t.tagID){case h.HTML:{mt(e,t);break}case h.BASEFONT:case h.BGSOUND:case h.HEAD:case h.LINK:case h.META:case h.NOFRAMES:case h.STYLE:{yn(e,t);break}case h.NOSCRIPT:{e._err(t,z.nestedNoscriptInHead);break}default:As(e,t)}}function V8(e,t){switch(t.tagID){case h.NOSCRIPT:{e.openElements.pop(),e.insertionMode=S.IN_HEAD;break}case h.BR:{As(e,t);break}default:e._err(t,z.endTagWithoutMatchingOpenElement)}}function As(e,t){const n=t.type===le.EOF?z.openElementsLeftAfterEof:z.disallowedContentInNoscriptInHead;e._err(t,n),e.openElements.pop(),e.insertionMode=S.IN_HEAD,e._processToken(t)}function W8(e,t){switch(t.tagID){case h.HTML:{mt(e,t);break}case h.BODY:{e._insertElement(t,W.HTML),e.framesetOk=!1,e.insertionMode=S.IN_BODY;break}case h.FRAMESET:{e._insertElement(t,W.HTML),e.insertionMode=S.IN_FRAMESET;break}case h.BASE:case h.BASEFONT:case h.BGSOUND:case h.LINK:case h.META:case h.NOFRAMES:case h.SCRIPT:case h.STYLE:case h.TEMPLATE:case h.TITLE:{e._err(t,z.abandonedHeadElementChild),e.openElements.push(e.headElement,h.HEAD),yn(e,t),e.openElements.remove(e.headElement);break}case h.HEAD:{e._err(t,z.misplacedStartTagForHeadElement);break}default:Cs(e,t)}}function $8(e,t){switch(t.tagID){case h.BODY:case h.HTML:case h.BR:{Cs(e,t);break}case h.TEMPLATE:{ki(e,t);break}default:e._err(t,z.endTagWithoutMatchingOpenElement)}}function Cs(e,t){e._insertFakeElement(_.BODY,h.BODY),e.insertionMode=S.IN_BODY,gu(e,t)}function gu(e,t){switch(t.type){case le.CHARACTER:{Ck(e,t);break}case le.WHITESPACE_CHARACTER:{Ak(e,t);break}case le.COMMENT:{fp(e,t);break}case le.START_TAG:{mt(e,t);break}case le.END_TAG:{xu(e,t);break}case le.EOF:{Sk(e,t);break}}}function Ak(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t)}function Ck(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=!1}function Y8(e,t){e.openElements.tmplCount===0&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs)}function G8(e,t){const n=e.openElements.tryPeekProperlyNestedBodyElement();n&&e.openElements.tmplCount===0&&(e.framesetOk=!1,e.treeAdapter.adoptAttributes(n,t.attrs))}function Q8(e,t){const n=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&n&&(e.treeAdapter.detachNode(n),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,W.HTML),e.insertionMode=S.IN_FRAMESET)}function K8(e,t){e.openElements.hasInButtonScope(h.P)&&e._closePElement(),e._insertElement(t,W.HTML)}function X8(e,t){e.openElements.hasInButtonScope(h.P)&&e._closePElement(),e.openElements.currentTagId!==void 0&&hp.has(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(t,W.HTML)}function Z8(e,t){e.openElements.hasInButtonScope(h.P)&&e._closePElement(),e._insertElement(t,W.HTML),e.skipNextNewLine=!0,e.framesetOk=!1}function J8(e,t){const n=e.openElements.tmplCount>0;(!e.formElement||n)&&(e.openElements.hasInButtonScope(h.P)&&e._closePElement(),e._insertElement(t,W.HTML),n||(e.formElement=e.openElements.current))}function eO(e,t){e.framesetOk=!1;const n=t.tagID;for(let a=e.openElements.stackTop;a>=0;a--){const r=e.openElements.tagIDs[a];if(n===h.LI&&r===h.LI||(n===h.DD||n===h.DT)&&(r===h.DD||r===h.DT)){e.openElements.generateImpliedEndTagsWithExclusion(r),e.openElements.popUntilTagNamePopped(r);break}if(r!==h.ADDRESS&&r!==h.DIV&&r!==h.P&&e._isSpecialElement(e.openElements.items[a],r))break}e.openElements.hasInButtonScope(h.P)&&e._closePElement(),e._insertElement(t,W.HTML)}function tO(e,t){e.openElements.hasInButtonScope(h.P)&&e._closePElement(),e._insertElement(t,W.HTML),e.tokenizer.state=Le.PLAINTEXT}function nO(e,t){e.openElements.hasInScope(h.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(h.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,W.HTML),e.framesetOk=!1}function aO(e,t){const n=e.activeFormattingElements.getElementEntryInScopeWithTagName(_.A);n&&(ff(e,t),e.openElements.remove(n.element),e.activeFormattingElements.removeEntry(n)),e._reconstructActiveFormattingElements(),e._insertElement(t,W.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function iO(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,W.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function rO(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(h.NOBR)&&(ff(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,W.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}function sO(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,W.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1}function oO(e,t){e.treeAdapter.getDocumentMode(e.document)!==$t.QUIRKS&&e.openElements.hasInButtonScope(h.P)&&e._closePElement(),e._insertElement(t,W.HTML),e.framesetOk=!1,e.insertionMode=S.IN_TABLE}function Ek(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,W.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function Nk(e){const t=hk(e,ci.TYPE);return t!=null&&t.toLowerCase()===E8}function lO(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,W.HTML),Nk(t)||(e.framesetOk=!1),t.ackSelfClosing=!0}function cO(e,t){e._appendElement(t,W.HTML),t.ackSelfClosing=!0}function uO(e,t){e.openElements.hasInButtonScope(h.P)&&e._closePElement(),e._appendElement(t,W.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function dO(e,t){t.tagName=_.IMG,t.tagID=h.IMG,Ek(e,t)}function mO(e,t){e._insertElement(t,W.HTML),e.skipNextNewLine=!0,e.tokenizer.state=Le.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=!1,e.insertionMode=S.TEXT}function pO(e,t){e.openElements.hasInButtonScope(h.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=!1,e._switchToTextParsing(t,Le.RAWTEXT)}function hO(e,t){e.framesetOk=!1,e._switchToTextParsing(t,Le.RAWTEXT)}function wy(e,t){e._switchToTextParsing(t,Le.RAWTEXT)}function fO(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,W.HTML),e.framesetOk=!1,e.insertionMode=e.insertionMode===S.IN_TABLE||e.insertionMode===S.IN_CAPTION||e.insertionMode===S.IN_TABLE_BODY||e.insertionMode===S.IN_ROW||e.insertionMode===S.IN_CELL?S.IN_SELECT_IN_TABLE:S.IN_SELECT}function gO(e,t){e.openElements.currentTagId===h.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,W.HTML)}function xO(e,t){e.openElements.hasInScope(h.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,W.HTML)}function yO(e,t){e.openElements.hasInScope(h.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(h.RTC),e._insertElement(t,W.HTML)}function bO(e,t){e._reconstructActiveFormattingElements(),vk(t),hf(t),t.selfClosing?e._appendElement(t,W.MATHML):e._insertElement(t,W.MATHML),t.ackSelfClosing=!0}function vO(e,t){e._reconstructActiveFormattingElements(),wk(t),hf(t),t.selfClosing?e._appendElement(t,W.SVG):e._insertElement(t,W.SVG),t.ackSelfClosing=!0}function ky(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,W.HTML)}function mt(e,t){switch(t.tagID){case h.I:case h.S:case h.B:case h.U:case h.EM:case h.TT:case h.BIG:case h.CODE:case h.FONT:case h.SMALL:case h.STRIKE:case h.STRONG:{iO(e,t);break}case h.A:{aO(e,t);break}case h.H1:case h.H2:case h.H3:case h.H4:case h.H5:case h.H6:{X8(e,t);break}case h.P:case h.DL:case h.OL:case h.UL:case h.DIV:case h.DIR:case h.NAV:case h.MAIN:case h.MENU:case h.ASIDE:case h.CENTER:case h.FIGURE:case h.FOOTER:case h.HEADER:case h.HGROUP:case h.DIALOG:case h.DETAILS:case h.ADDRESS:case h.ARTICLE:case h.SEARCH:case h.SECTION:case h.SUMMARY:case h.FIELDSET:case h.BLOCKQUOTE:case h.FIGCAPTION:{K8(e,t);break}case h.LI:case h.DD:case h.DT:{eO(e,t);break}case h.BR:case h.IMG:case h.WBR:case h.AREA:case h.EMBED:case h.KEYGEN:{Ek(e,t);break}case h.HR:{uO(e,t);break}case h.RB:case h.RTC:{xO(e,t);break}case h.RT:case h.RP:{yO(e,t);break}case h.PRE:case h.LISTING:{Z8(e,t);break}case h.XMP:{pO(e,t);break}case h.SVG:{vO(e,t);break}case h.HTML:{Y8(e,t);break}case h.BASE:case h.LINK:case h.META:case h.STYLE:case h.TITLE:case h.SCRIPT:case h.BGSOUND:case h.BASEFONT:case h.TEMPLATE:{yn(e,t);break}case h.BODY:{G8(e,t);break}case h.FORM:{J8(e,t);break}case h.NOBR:{rO(e,t);break}case h.MATH:{bO(e,t);break}case h.TABLE:{oO(e,t);break}case h.INPUT:{lO(e,t);break}case h.PARAM:case h.TRACK:case h.SOURCE:{cO(e,t);break}case h.IMAGE:{dO(e,t);break}case h.BUTTON:{nO(e,t);break}case h.APPLET:case h.OBJECT:case h.MARQUEE:{sO(e,t);break}case h.IFRAME:{hO(e,t);break}case h.SELECT:{fO(e,t);break}case h.OPTION:case h.OPTGROUP:{gO(e,t);break}case h.NOEMBED:case h.NOFRAMES:{wy(e,t);break}case h.FRAMESET:{Q8(e,t);break}case h.TEXTAREA:{mO(e,t);break}case h.NOSCRIPT:{e.options.scriptingEnabled?wy(e,t):ky(e,t);break}case h.PLAINTEXT:{tO(e,t);break}case h.COL:case h.TH:case h.TD:case h.TR:case h.HEAD:case h.FRAME:case h.TBODY:case h.TFOOT:case h.THEAD:case h.CAPTION:case h.COLGROUP:break;default:ky(e,t)}}function wO(e,t){if(e.openElements.hasInScope(h.BODY)&&(e.insertionMode=S.AFTER_BODY,e.options.sourceCodeLocationInfo)){const n=e.openElements.tryPeekProperlyNestedBodyElement();n&&e._setEndLocation(n,t)}}function kO(e,t){e.openElements.hasInScope(h.BODY)&&(e.insertionMode=S.AFTER_BODY,_k(e,t))}function AO(e,t){const n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n))}function CO(e){const t=e.openElements.tmplCount>0,{formElement:n}=e;t||(e.formElement=null),(n||t)&&e.openElements.hasInScope(h.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(h.FORM):n&&e.openElements.remove(n))}function EO(e){e.openElements.hasInButtonScope(h.P)||e._insertFakeElement(_.P,h.P),e._closePElement()}function NO(e){e.openElements.hasInListItemScope(h.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(h.LI),e.openElements.popUntilTagNamePopped(h.LI))}function TO(e,t){const n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.popUntilTagNamePopped(n))}function SO(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped())}function IO(e,t){const n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker())}function jO(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(_.BR,h.BR),e.openElements.pop(),e.framesetOk=!1}function Tk(e,t){const n=t.tagName,a=t.tagID;for(let r=e.openElements.stackTop;r>0;r--){const s=e.openElements.items[r],o=e.openElements.tagIDs[r];if(a===o&&(a!==h.UNKNOWN||e.treeAdapter.getTagName(s)===n)){e.openElements.generateImpliedEndTagsWithExclusion(a),e.openElements.stackTop>=r&&e.openElements.shortenToLength(r);break}if(e._isSpecialElement(s,o))break}}function xu(e,t){switch(t.tagID){case h.A:case h.B:case h.I:case h.S:case h.U:case h.EM:case h.TT:case h.BIG:case h.CODE:case h.FONT:case h.NOBR:case h.SMALL:case h.STRIKE:case h.STRONG:{ff(e,t);break}case h.P:{EO(e);break}case h.DL:case h.UL:case h.OL:case h.DIR:case h.DIV:case h.NAV:case h.PRE:case h.MAIN:case h.MENU:case h.ASIDE:case h.BUTTON:case h.CENTER:case h.FIGURE:case h.FOOTER:case h.HEADER:case h.HGROUP:case h.DIALOG:case h.ADDRESS:case h.ARTICLE:case h.DETAILS:case h.SEARCH:case h.SECTION:case h.SUMMARY:case h.LISTING:case h.FIELDSET:case h.BLOCKQUOTE:case h.FIGCAPTION:{AO(e,t);break}case h.LI:{NO(e);break}case h.DD:case h.DT:{TO(e,t);break}case h.H1:case h.H2:case h.H3:case h.H4:case h.H5:case h.H6:{SO(e);break}case h.BR:{jO(e);break}case h.BODY:{wO(e,t);break}case h.HTML:{kO(e,t);break}case h.FORM:{CO(e);break}case h.APPLET:case h.OBJECT:case h.MARQUEE:{IO(e,t);break}case h.TEMPLATE:{ki(e,t);break}default:Tk(e,t)}}function Sk(e,t){e.tmplInsertionModeStack.length>0?Ok(e,t):gf(e,t)}function PO(e,t){var n;t.tagID===h.SCRIPT&&((n=e.scriptHandler)===null||n===void 0||n.call(e,e.openElements.current)),e.openElements.pop(),e.insertionMode=e.originalInsertionMode}function MO(e,t){e._err(t,z.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(t)}function Cd(e,t){if(e.openElements.currentTagId!==void 0&&kk.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=!1,e.originalInsertionMode=e.insertionMode,e.insertionMode=S.IN_TABLE_TEXT,t.type){case le.CHARACTER:{jk(e,t);break}case le.WHITESPACE_CHARACTER:{Ik(e,t);break}}else wo(e,t)}function DO(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,W.HTML),e.insertionMode=S.IN_CAPTION}function RO(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,W.HTML),e.insertionMode=S.IN_COLUMN_GROUP}function OO(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(_.COLGROUP,h.COLGROUP),e.insertionMode=S.IN_COLUMN_GROUP,xf(e,t)}function _O(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,W.HTML),e.insertionMode=S.IN_TABLE_BODY}function LO(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(_.TBODY,h.TBODY),e.insertionMode=S.IN_TABLE_BODY,yu(e,t)}function zO(e,t){e.openElements.hasInTableScope(h.TABLE)&&(e.openElements.popUntilTagNamePopped(h.TABLE),e._resetInsertionMode(),e._processStartTag(t))}function qO(e,t){Nk(t)?e._appendElement(t,W.HTML):wo(e,t),t.ackSelfClosing=!0}function BO(e,t){!e.formElement&&e.openElements.tmplCount===0&&(e._insertElement(t,W.HTML),e.formElement=e.openElements.current,e.openElements.pop())}function fr(e,t){switch(t.tagID){case h.TD:case h.TH:case h.TR:{LO(e,t);break}case h.STYLE:case h.SCRIPT:case h.TEMPLATE:{yn(e,t);break}case h.COL:{OO(e,t);break}case h.FORM:{BO(e,t);break}case h.TABLE:{zO(e,t);break}case h.TBODY:case h.TFOOT:case h.THEAD:{_O(e,t);break}case h.INPUT:{qO(e,t);break}case h.CAPTION:{DO(e,t);break}case h.COLGROUP:{RO(e,t);break}default:wo(e,t)}}function Zs(e,t){switch(t.tagID){case h.TABLE:{e.openElements.hasInTableScope(h.TABLE)&&(e.openElements.popUntilTagNamePopped(h.TABLE),e._resetInsertionMode());break}case h.TEMPLATE:{ki(e,t);break}case h.BODY:case h.CAPTION:case h.COL:case h.COLGROUP:case h.HTML:case h.TBODY:case h.TD:case h.TFOOT:case h.TH:case h.THEAD:case h.TR:break;default:wo(e,t)}}function wo(e,t){const n=e.fosterParentingEnabled;e.fosterParentingEnabled=!0,gu(e,t),e.fosterParentingEnabled=n}function Ik(e,t){e.pendingCharacterTokens.push(t)}function jk(e,t){e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=!0}function Yr(e,t){let n=0;if(e.hasNonWhitespacePendingCharacterToken)for(;n<e.pendingCharacterTokens.length;n++)wo(e,e.pendingCharacterTokens[n]);else for(;n<e.pendingCharacterTokens.length;n++)e._insertCharacters(e.pendingCharacterTokens[n]);e.insertionMode=e.originalInsertionMode,e._processToken(t)}const Pk=new Set([h.CAPTION,h.COL,h.COLGROUP,h.TBODY,h.TD,h.TFOOT,h.TH,h.THEAD,h.TR]);function FO(e,t){const n=t.tagID;Pk.has(n)?e.openElements.hasInTableScope(h.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(h.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=S.IN_TABLE,fr(e,t)):mt(e,t)}function HO(e,t){const n=t.tagID;switch(n){case h.CAPTION:case h.TABLE:{e.openElements.hasInTableScope(h.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(h.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=S.IN_TABLE,n===h.TABLE&&Zs(e,t));break}case h.BODY:case h.COL:case h.COLGROUP:case h.HTML:case h.TBODY:case h.TD:case h.TFOOT:case h.TH:case h.THEAD:case h.TR:break;default:xu(e,t)}}function xf(e,t){switch(t.tagID){case h.HTML:{mt(e,t);break}case h.COL:{e._appendElement(t,W.HTML),t.ackSelfClosing=!0;break}case h.TEMPLATE:{yn(e,t);break}default:vc(e,t)}}function UO(e,t){switch(t.tagID){case h.COLGROUP:{e.openElements.currentTagId===h.COLGROUP&&(e.openElements.pop(),e.insertionMode=S.IN_TABLE);break}case h.TEMPLATE:{ki(e,t);break}case h.COL:break;default:vc(e,t)}}function vc(e,t){e.openElements.currentTagId===h.COLGROUP&&(e.openElements.pop(),e.insertionMode=S.IN_TABLE,e._processToken(t))}function yu(e,t){switch(t.tagID){case h.TR:{e.openElements.clearBackToTableBodyContext(),e._insertElement(t,W.HTML),e.insertionMode=S.IN_ROW;break}case h.TH:case h.TD:{e.openElements.clearBackToTableBodyContext(),e._insertFakeElement(_.TR,h.TR),e.insertionMode=S.IN_ROW,bu(e,t);break}case h.CAPTION:case h.COL:case h.COLGROUP:case h.TBODY:case h.TFOOT:case h.THEAD:{e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=S.IN_TABLE,fr(e,t));break}default:fr(e,t)}}function gp(e,t){const n=t.tagID;switch(t.tagID){case h.TBODY:case h.TFOOT:case h.THEAD:{e.openElements.hasInTableScope(n)&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=S.IN_TABLE);break}case h.TABLE:{e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=S.IN_TABLE,Zs(e,t));break}case h.BODY:case h.CAPTION:case h.COL:case h.COLGROUP:case h.HTML:case h.TD:case h.TH:case h.TR:break;default:Zs(e,t)}}function bu(e,t){switch(t.tagID){case h.TH:case h.TD:{e.openElements.clearBackToTableRowContext(),e._insertElement(t,W.HTML),e.insertionMode=S.IN_CELL,e.activeFormattingElements.insertMarker();break}case h.CAPTION:case h.COL:case h.COLGROUP:case h.TBODY:case h.TFOOT:case h.THEAD:case h.TR:{e.openElements.hasInTableScope(h.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=S.IN_TABLE_BODY,yu(e,t));break}default:fr(e,t)}}function Mk(e,t){switch(t.tagID){case h.TR:{e.openElements.hasInTableScope(h.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=S.IN_TABLE_BODY);break}case h.TABLE:{e.openElements.hasInTableScope(h.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=S.IN_TABLE_BODY,gp(e,t));break}case h.TBODY:case h.TFOOT:case h.THEAD:{(e.openElements.hasInTableScope(t.tagID)||e.openElements.hasInTableScope(h.TR))&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=S.IN_TABLE_BODY,gp(e,t));break}case h.BODY:case h.CAPTION:case h.COL:case h.COLGROUP:case h.HTML:case h.TD:case h.TH:break;default:Zs(e,t)}}function VO(e,t){const n=t.tagID;Pk.has(n)?(e.openElements.hasInTableScope(h.TD)||e.openElements.hasInTableScope(h.TH))&&(e._closeTableCell(),bu(e,t)):mt(e,t)}function WO(e,t){const n=t.tagID;switch(n){case h.TD:case h.TH:{e.openElements.hasInTableScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=S.IN_ROW);break}case h.TABLE:case h.TBODY:case h.TFOOT:case h.THEAD:case h.TR:{e.openElements.hasInTableScope(n)&&(e._closeTableCell(),Mk(e,t));break}case h.BODY:case h.CAPTION:case h.COL:case h.COLGROUP:case h.HTML:break;default:xu(e,t)}}function Dk(e,t){switch(t.tagID){case h.HTML:{mt(e,t);break}case h.OPTION:{e.openElements.currentTagId===h.OPTION&&e.openElements.pop(),e._insertElement(t,W.HTML);break}case h.OPTGROUP:{e.openElements.currentTagId===h.OPTION&&e.openElements.pop(),e.openElements.currentTagId===h.OPTGROUP&&e.openElements.pop(),e._insertElement(t,W.HTML);break}case h.HR:{e.openElements.currentTagId===h.OPTION&&e.openElements.pop(),e.openElements.currentTagId===h.OPTGROUP&&e.openElements.pop(),e._appendElement(t,W.HTML),t.ackSelfClosing=!0;break}case h.INPUT:case h.KEYGEN:case h.TEXTAREA:case h.SELECT:{e.openElements.hasInSelectScope(h.SELECT)&&(e.openElements.popUntilTagNamePopped(h.SELECT),e._resetInsertionMode(),t.tagID!==h.SELECT&&e._processStartTag(t));break}case h.SCRIPT:case h.TEMPLATE:{yn(e,t);break}}}function Rk(e,t){switch(t.tagID){case h.OPTGROUP:{e.openElements.stackTop>0&&e.openElements.currentTagId===h.OPTION&&e.openElements.tagIDs[e.openElements.stackTop-1]===h.OPTGROUP&&e.openElements.pop(),e.openElements.currentTagId===h.OPTGROUP&&e.openElements.pop();break}case h.OPTION:{e.openElements.currentTagId===h.OPTION&&e.openElements.pop();break}case h.SELECT:{e.openElements.hasInSelectScope(h.SELECT)&&(e.openElements.popUntilTagNamePopped(h.SELECT),e._resetInsertionMode());break}case h.TEMPLATE:{ki(e,t);break}}}function $O(e,t){const n=t.tagID;n===h.CAPTION||n===h.TABLE||n===h.TBODY||n===h.TFOOT||n===h.THEAD||n===h.TR||n===h.TD||n===h.TH?(e.openElements.popUntilTagNamePopped(h.SELECT),e._resetInsertionMode(),e._processStartTag(t)):Dk(e,t)}function YO(e,t){const n=t.tagID;n===h.CAPTION||n===h.TABLE||n===h.TBODY||n===h.TFOOT||n===h.THEAD||n===h.TR||n===h.TD||n===h.TH?e.openElements.hasInTableScope(n)&&(e.openElements.popUntilTagNamePopped(h.SELECT),e._resetInsertionMode(),e.onEndTag(t)):Rk(e,t)}function GO(e,t){switch(t.tagID){case h.BASE:case h.BASEFONT:case h.BGSOUND:case h.LINK:case h.META:case h.NOFRAMES:case h.SCRIPT:case h.STYLE:case h.TEMPLATE:case h.TITLE:{yn(e,t);break}case h.CAPTION:case h.COLGROUP:case h.TBODY:case h.TFOOT:case h.THEAD:{e.tmplInsertionModeStack[0]=S.IN_TABLE,e.insertionMode=S.IN_TABLE,fr(e,t);break}case h.COL:{e.tmplInsertionModeStack[0]=S.IN_COLUMN_GROUP,e.insertionMode=S.IN_COLUMN_GROUP,xf(e,t);break}case h.TR:{e.tmplInsertionModeStack[0]=S.IN_TABLE_BODY,e.insertionMode=S.IN_TABLE_BODY,yu(e,t);break}case h.TD:case h.TH:{e.tmplInsertionModeStack[0]=S.IN_ROW,e.insertionMode=S.IN_ROW,bu(e,t);break}default:e.tmplInsertionModeStack[0]=S.IN_BODY,e.insertionMode=S.IN_BODY,mt(e,t)}}function QO(e,t){t.tagID===h.TEMPLATE&&ki(e,t)}function Ok(e,t){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(h.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(t)):gf(e,t)}function KO(e,t){t.tagID===h.HTML?mt(e,t):wc(e,t)}function _k(e,t){var n;if(t.tagID===h.HTML){if(e.fragmentContext||(e.insertionMode=S.AFTER_AFTER_BODY),e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===h.HTML){e._setEndLocation(e.openElements.items[0],t);const a=e.openElements.items[1];a&&!(!((n=e.treeAdapter.getNodeSourceCodeLocation(a))===null||n===void 0)&&n.endTag)&&e._setEndLocation(a,t)}}else wc(e,t)}function wc(e,t){e.insertionMode=S.IN_BODY,gu(e,t)}function XO(e,t){switch(t.tagID){case h.HTML:{mt(e,t);break}case h.FRAMESET:{e._insertElement(t,W.HTML);break}case h.FRAME:{e._appendElement(t,W.HTML),t.ackSelfClosing=!0;break}case h.NOFRAMES:{yn(e,t);break}}}function ZO(e,t){t.tagID===h.FRAMESET&&!e.openElements.isRootHtmlElementCurrent()&&(e.openElements.pop(),!e.fragmentContext&&e.openElements.currentTagId!==h.FRAMESET&&(e.insertionMode=S.AFTER_FRAMESET))}function JO(e,t){switch(t.tagID){case h.HTML:{mt(e,t);break}case h.NOFRAMES:{yn(e,t);break}}}function e_(e,t){t.tagID===h.HTML&&(e.insertionMode=S.AFTER_AFTER_FRAMESET)}function t_(e,t){t.tagID===h.HTML?mt(e,t):Pl(e,t)}function Pl(e,t){e.insertionMode=S.IN_BODY,gu(e,t)}function n_(e,t){switch(t.tagID){case h.HTML:{mt(e,t);break}case h.NOFRAMES:{yn(e,t);break}}}function a_(e,t){t.chars=Ie,e._insertCharacters(t)}function i_(e,t){e._insertCharacters(t),e.framesetOk=!1}function Lk(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==W.HTML&&e.openElements.currentTagId!==void 0&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop()}function r_(e,t){if(v8(t))Lk(e),e._startTagOutsideForeignContent(t);else{const n=e._getAdjustedCurrentElement(),a=e.treeAdapter.getNamespaceURI(n);a===W.MATHML?vk(t):a===W.SVG&&(w8(t),wk(t)),hf(t),t.selfClosing?e._appendElement(t,a):e._insertElement(t,a),t.ackSelfClosing=!0}}function s_(e,t){if(t.tagID===h.P||t.tagID===h.BR){Lk(e),e._endTagOutsideForeignContent(t);return}for(let n=e.openElements.stackTop;n>0;n--){const a=e.openElements.items[n];if(e.treeAdapter.getNamespaceURI(a)===W.HTML){e._endTagOutsideForeignContent(t);break}const r=e.treeAdapter.getTagName(a);if(r.toLowerCase()===t.tagName){t.tagName=r,e.openElements.shortenToLength(n);break}}}_.AREA,_.BASE,_.BASEFONT,_.BGSOUND,_.BR,_.COL,_.EMBED,_.FRAME,_.HR,_.IMG,_.INPUT,_.KEYGEN,_.LINK,_.META,_.PARAM,_.SOURCE,_.TRACK,_.WBR;const o_=/<(\/?)(iframe|noembed|noframes|plaintext|script|style|textarea|title|xmp)(?=[\t\n\f\r />])/gi,l_=new Set(["mdxFlowExpression","mdxJsxFlowElement","mdxJsxTextElement","mdxTextExpression","mdxjsEsm"]),Ay={sourceCodeLocationInfo:!0,scriptingEnabled:!1};function zk(e,t){const n=y_(e),a=ck("type",{handlers:{root:c_,element:u_,text:d_,comment:Bk,doctype:m_,raw:h_},unknown:f_}),r={parser:n?new vy(Ay):vy.getFragmentParser(void 0,Ay),handle(l){a(l,r)},stitches:!1,options:t||{}};a(e,r),Ir(r,Rn());const s=n?r.parser.document:r.parser.getFragment(),o=bR(s,{file:r.options.file});return r.stitches&&fu(o,"comment",function(l,c,u){const d=l;if(d.value.stitch&&u&&c!==void 0){const m=u.children;return m[c]=d.value.stitch,c}}),o.type==="root"&&o.children.length===1&&o.children[0].type===e.type?o.children[0]:o}function qk(e,t){let n=-1;if(e)for(;++n<e.length;)t.handle(e[n])}function c_(e,t){qk(e.children,t)}function u_(e,t){g_(e,t),qk(e.children,t),x_(e,t)}function d_(e,t){t.parser.tokenizer.state>4&&(t.parser.tokenizer.state=0);const n={type:le.CHARACTER,chars:e.value,location:ko(e)};Ir(t,Rn(e)),t.parser.currentToken=n,t.parser._processToken(t.parser.currentToken)}function m_(e,t){const n={type:le.DOCTYPE,name:"html",forceQuirks:!1,publicId:"",systemId:"",location:ko(e)};Ir(t,Rn(e)),t.parser.currentToken=n,t.parser._processToken(t.parser.currentToken)}function p_(e,t){t.stitches=!0;const n=b_(e);if("children"in e&&"children"in n){const a=zk({type:"root",children:e.children},t.options);n.children=a.children}Bk({type:"comment",value:{stitch:n}},t)}function Bk(e,t){const n=e.value,a={type:le.COMMENT,data:n,location:ko(e)};Ir(t,Rn(e)),t.parser.currentToken=a,t.parser._processToken(t.parser.currentToken)}function h_(e,t){if(t.parser.tokenizer.preprocessor.html="",t.parser.tokenizer.preprocessor.pos=-1,t.parser.tokenizer.preprocessor.lastGapPos=-2,t.parser.tokenizer.preprocessor.gapStack=[],t.parser.tokenizer.preprocessor.skipNextNewLine=!1,t.parser.tokenizer.preprocessor.lastChunkWritten=!1,t.parser.tokenizer.preprocessor.endOfChunkHit=!1,t.parser.tokenizer.preprocessor.isEol=!1,Fk(t,Rn(e)),t.parser.tokenizer.write(t.options.tagfilter?e.value.replace(o_,"<$1$2"):e.value,!1),t.parser.tokenizer._runParsingLoop(),t.parser.tokenizer.state===72||t.parser.tokenizer.state===78){t.parser.tokenizer.preprocessor.lastChunkWritten=!0;const n=t.parser.tokenizer._consume();t.parser.tokenizer._callState(n)}}function f_(e,t){const n=e;if(t.options.passThrough&&t.options.passThrough.includes(n.type))p_(n,t);else{let a="";throw l_.has(n.type)&&(a=". It looks like you are using MDX nodes with `hast-util-raw` (or `rehype-raw`). If you use this because you are using remark or rehype plugins that inject `'html'` nodes, then please raise an issue with that plugin, as its a bad and slow idea. If you use this because you are using markdown syntax, then you have to configure this utility (or plugin) to pass through these nodes (see `passThrough` in docs), but you can also migrate to use the MDX syntax"),new Error("Cannot compile `"+n.type+"` node"+a)}}function Ir(e,t){Fk(e,t);const n=e.parser.tokenizer.currentCharacterToken;n&&n.location&&(n.location.endLine=e.parser.tokenizer.preprocessor.line,n.location.endCol=e.parser.tokenizer.preprocessor.col+1,n.location.endOffset=e.parser.tokenizer.preprocessor.offset+1,e.parser.currentToken=n,e.parser._processToken(e.parser.currentToken)),e.parser.tokenizer.paused=!1,e.parser.tokenizer.inLoop=!1,e.parser.tokenizer.active=!1,e.parser.tokenizer.returnState=Le.DATA,e.parser.tokenizer.charRefCode=-1,e.parser.tokenizer.consumedAfterSnapshot=-1,e.parser.tokenizer.currentLocation=null,e.parser.tokenizer.currentCharacterToken=null,e.parser.tokenizer.currentToken=null,e.parser.tokenizer.currentAttr={name:"",value:""}}function Fk(e,t){if(t&&t.offset!==void 0){const n={startLine:t.line,startCol:t.column,startOffset:t.offset,endLine:-1,endCol:-1,endOffset:-1};e.parser.tokenizer.preprocessor.lineStartPos=-t.column+1,e.parser.tokenizer.preprocessor.droppedBufferSize=t.offset,e.parser.tokenizer.preprocessor.line=t.line,e.parser.tokenizer.currentLocation=n}}function g_(e,t){const n=e.tagName.toLowerCase();if(t.parser.tokenizer.state===Le.PLAINTEXT)return;Ir(t,Rn(e));const a=t.parser.openElements.current;let r="namespaceURI"in a?a.namespaceURI:ni.html;r===ni.html&&n==="svg"&&(r=ni.svg);const s=CR({...e,children:[]},{space:r===ni.svg?"svg":"html"}),o={type:le.START_TAG,tagName:n,tagID:Sr(n),selfClosing:!1,ackSelfClosing:!1,attrs:"attrs"in s?s.attrs:[],location:ko(e)};t.parser.currentToken=o,t.parser._processToken(t.parser.currentToken),t.parser.tokenizer.lastStartTagName=n}function x_(e,t){const n=e.tagName.toLowerCase();if(!t.parser.tokenizer.inForeignNode&&MR.includes(n)||t.parser.tokenizer.state===Le.PLAINTEXT)return;Ir(t,cu(e));const a={type:le.END_TAG,tagName:n,tagID:Sr(n),selfClosing:!1,ackSelfClosing:!1,attrs:[],location:ko(e)};t.parser.currentToken=a,t.parser._processToken(t.parser.currentToken),n===t.parser.tokenizer.lastStartTagName&&(t.parser.tokenizer.state===Le.RCDATA||t.parser.tokenizer.state===Le.RAWTEXT||t.parser.tokenizer.state===Le.SCRIPT_DATA)&&(t.parser.tokenizer.state=Le.DATA)}function y_(e){const t=e.type==="root"?e.children[0]:e;return!!(t&&(t.type==="doctype"||t.type==="element"&&t.tagName.toLowerCase()==="html"))}function ko(e){const t=Rn(e)||{line:void 0,column:void 0,offset:void 0},n=cu(e)||{line:void 0,column:void 0,offset:void 0};return{startLine:t.line,startCol:t.column,startOffset:t.offset,endLine:n.line,endCol:n.column,endOffset:n.offset}}function b_(e){return"children"in e?hr({...e,children:[]}):hr(e)}function v_(e){return function(t,n){return zk(t,{...e,file:n})}}function Cy(e,t){const n=String(e);if(typeof t!="string")throw new TypeError("Expected character");let a=0,r=n.indexOf(t);for(;r!==-1;)a++,r=n.indexOf(t,r+t.length);return a}function w_(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function k_(e,t,n){const r=pu((n||{}).ignore||[]),s=A_(t);let o=-1;for(;++o<s.length;)ak(e,"text",l);function l(u,d){let m=-1,p;for(;++m<d.length;){const f=d[m],g=p?p.children:void 0;if(r(f,g?g.indexOf(f):void 0,p))return;p=f}if(p)return c(u,d)}function c(u,d){const m=d[d.length-1],p=s[o][0],f=s[o][1];let g=0;const w=m.children.indexOf(u);let x=!1,b=[];p.lastIndex=0;let v=p.exec(u.value);for(;v;){const N=v.index,I={index:v.index,input:v.input,stack:[...d,u]};let C=f(...v,I);if(typeof C=="string"&&(C=C.length>0?{type:"text",value:C}:void 0),C===!1?p.lastIndex=N+1:(g!==N&&b.push({type:"text",value:u.value.slice(g,N)}),Array.isArray(C)?b.push(...C):C&&b.push(C),g=N+v[0].length,x=!0),!p.global)break;v=p.exec(u.value)}return x?(g<u.value.length&&b.push({type:"text",value:u.value.slice(g)}),m.children.splice(w,1,...b)):b=[u],w+b.length}}function A_(e){const t=[];if(!Array.isArray(e))throw new TypeError("Expected find and replace tuple or list of tuples");const n=!e[0]||Array.isArray(e[0])?e:[e];let a=-1;for(;++a<n.length;){const r=n[a];t.push([C_(r[0]),E_(r[1])])}return t}function C_(e){return typeof e=="string"?new RegExp(w_(e),"g"):e}function E_(e){return typeof e=="function"?e:function(){return e}}const Ed="phrasing",Nd=["autolink","link","image","label"];
vendor: 5,051 bytes, lines 9699-9700
9699function N_(){return{transforms:[D_],enter:{literalAutolink:S_,literalAutolinkEmail:Td,literalAutolinkHttp:Td,literalAutolinkWww:Td},exit:{literalAutolink:M_,literalAutolinkEmail:P_,literalAutolinkHttp:I_,literalAutolinkWww:j_}}}function T_(){return{unsafe:[{character:"@",before:"[+\\-.\\w]",after:"[\\-.\\w]",inConstruct:Ed,notInConstruct:Nd},{character:".",before:"[Ww]",after:"[\\-.\\w]",inConstruct:Ed,notInConstruct:Nd},{character:":",before:"[ps]",after:"\\/",inConstruct:Ed,notInConstruct:Nd}]}}function S_(e){this.enter({type:"link",title:null,url:"",children:[]},e)}function Td(e){this.config.enter.autolinkProtocol.call(this,e)}function I_(e){this.config.exit.autolinkProtocol.call(this,e)}function j_(e){this.config.exit.data.call(this,e);const t=this.stack[this.stack.length-1];t.type,t.url="http://"+this.sliceSerialize(e)}function P_(e){this.config.exit.autolinkEmail.call(this,e)}function M_(e){this.exit(e)}function D_(e){k_(e,[[/(https?:\/\/|www(?=\.))([-.\w]+)([^ \t\r\n]*)/gi,R_],[new RegExp("(?<=^|\\s|\\p{P}|\\p{S})([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)","gu"),O_]],{ignore:["link","linkReference"]})}function R_(e,t,n,a,r){let s="";if(!Hk(r)||(/^w/i.test(t)&&(n=t+n,t="",s="http://"),!__(n)))return!1;const o=L_(n+a);if(!o[0])return!1;const l={type:"link",title:null,url:s+t+o[0],children:[{type:"text",value:t+o[0]}]};return o[1]?[l,{type:"text",value:o[1]}]:l}function O_(e,t,n,a){return!Hk(a,!0)||/[-\d_]$/.test(n)?!1:{type:"link",title:null,url:"mailto:"+t+"@"+n,children:[{type:"text",value:t+"@"+n}]}}function __(e){const t=e.split(".");return!(t.length<2||t[t.length-1]&&(/_/.test(t[t.length-1])||!/[a-zA-Z\d]/.test(t[t.length-1]))||t[t.length-2]&&(/_/.test(t[t.length-2])||!/[a-zA-Z\d]/.test(t[t.length-2])))}function L_(e){const t=/[!"&'),.:;<>?\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let n=t[0],a=n.indexOf(")");const r=Cy(e,"(");let s=Cy(e,")");for(;a!==-1&&r>s;)e+=n.slice(0,a+1),n=n.slice(a+1),a=n.indexOf(")"),s++;return[e,n]}function Hk(e,t){const n=e.input.charCodeAt(e.index-1);return(e.index===0||xi(n)||uu(n))&&(!t||n!==47)}Uk.peek=$_;function z_(){this.buffer()}function q_(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function B_(){this.buffer()}function F_(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function H_(e){const t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.identifier=hn(this.sliceSerialize(e)).toLowerCase(),n.label=t}function U_(e){this.exit(e)}function V_(e){const t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.identifier=hn(this.sliceSerialize(e)).toLowerCase(),n.label=t}function W_(e){this.exit(e)}function $_(){return"["}function Uk(e,t,n,a){const r=n.createTracker(a);let s=r.move("[^");const o=n.enter("footnoteReference"),l=n.enter("reference");return s+=r.move(n.safe(n.associationId(e),{after:"]",before:s})),l(),o(),s+=r.move("]"),s}function Y_(){return{enter:{gfmFootnoteCallString:z_,gfmFootnoteCall:q_,gfmFootnoteDefinitionLabelString:B_,gfmFootnoteDefinition:F_},exit:{gfmFootnoteCallString:H_,gfmFootnoteCall:U_,gfmFootnoteDefinitionLabelString:V_,gfmFootnoteDefinition:W_}}}function G_(e){let t=!1;return e&&e.firstLineBlank&&(t=!0),{handlers:{footnoteDefinition:n,footnoteReference:Uk},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function n(a,r,s,o){const l=s.createTracker(o);let c=l.move("[^");const u=s.enter("footnoteDefinition"),d=s.enter("label");return c+=l.move(s.safe(s.associationId(a),{before:c,after:"]"})),d(),c+=l.move("]:"),a.children&&a.children.length>0&&(l.shift(4),c+=l.move((t?` 9700`:" ")+s.indentLines(s.containerFlow(a,l.current()),t?Vk:Q_))),u(),c}}function Q_(e,t,n){return t===0?e:Vk(e,t,n)}function Vk(e,t,n){return(n?"":" ")+e}const K_=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];Wk.peek=tL;function X_(){return{canContainEols:["delete"],enter:{strikethrough:J_},exit:{strikethrough:eL}}}function Z_(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:K_}],handlers:{delete:Wk}}}function J_(e){this.enter({type:"delete",children:[]},e)}function eL(e){this.exit(e)}function Wk(e,t,n,a){const r=n.createTracker(a),s=n.enter("strikethrough");let o=r.move("~~");return o+=n.containerPhrasing(e,{...r.current(),before:o,after:"~"}),o+=r.move("~~"),s(),o}function tL(){return"~"}function nL(e){return e.length}function aL(e,t){const n=t||{},a=(n.align||[]).concat(),r=n.stringLength||nL,s=[],o=[],l=[],c=[];let u=0,d=-1;for(;++d<e.length;){const y=[],w=[];let x=-1;for(e[d].length>u&&(u=e[d].length);++x<e[d].length;){const b=iL(e[d][x]);if(n.alignDelimiters!==!1){const v=r(b);w[x]=v,(c[x]===void 0||v>c[x])&&(c[x]=v)}y.push(b)}o[d]=y,l[d]=w}let m=-1;if(typeof a=="object"&&"length"in a)for(;++m<u;)s[m]=Ey(a[m]);else{const y=Ey(a);for(;++m<u;)s[m]=y}m=-1;const p=[],f=[];for(;++m<u;){const y=s[m];let w="",x="";y===99?(w=":",x=":"):y===108?w=":":y===114&&(x=":");let b=n.alignDelimiters===!1?1:Math.max(1,c[m]-w.length-x.length);const v=w+"-".repeat(b)+x;
vendor: 12,704 bytes, lines 9700-9712
9700n.alignDelimiters!==!1&&(b=w.length+b+x.length,b>c[m]&&(c[m]=b),f[m]=b),p[m]=v}o.splice(1,0,p),l.splice(1,0,f),d=-1;const g=[];for(;++d<o.length;){const y=o[d],w=l[d];m=-1;const x=[];for(;++m<u;){const b=y[m]||"";let v="",N="";if(n.alignDelimiters!==!1){const I=c[m]-(w[m]||0),C=s[m];C===114?v=" ".repeat(I):C===99?I%2?(v=" ".repeat(I/2+.5),N=" ".repeat(I/2-.5)):(v=" ".repeat(I/2),N=v):N=" ".repeat(I)}n.delimiterStart!==!1&&!m&&x.push("|"),n.padding!==!1&&!(n.alignDelimiters===!1&&b==="")&&(n.delimiterStart!==!1||m)&&x.push(" "),n.alignDelimiters!==!1&&x.push(v),x.push(b),n.alignDelimiters!==!1&&x.push(N),n.padding!==!1&&x.push(" "),(n.delimiterEnd!==!1||m!==u-1)&&x.push("|")}g.push(n.delimiterEnd===!1?x.join("").replace(/ +$/,""):x.join(""))}return g.join(` 9701`)}function iL(e){return e==null?"":String(e)}function Ey(e){const t=typeof e=="string"?e.codePointAt(0):0;return t===67||t===99?99:t===76||t===108?108:t===82||t===114?114:0}function rL(e,t,n,a){const r=n.enter("blockquote"),s=n.createTracker(a);s.move("> "),s.shift(2);const o=n.indentLines(n.containerFlow(e,s.current()),sL);return r(),o}function sL(e,t,n){return">"+(n?"":" ")+e}function oL(e,t){return Ny(e,t.inConstruct,!0)&&!Ny(e,t.notInConstruct,!1)}function Ny(e,t,n){if(typeof t=="string"&&(t=[t]),!t||t.length===0)return n;let a=-1;for(;++a<t.length;)if(e.includes(t[a]))return!0;return!1}function Ty(e,t,n,a){let r=-1;for(;++r<n.unsafe.length;)if(n.unsafe[r].character===` 9702`&&oL(n.stack,n.unsafe[r]))return/[ \t]/.test(a.before)?"":" ";return`\\ 9703`}function lL(e,t){const n=String(e);let a=n.indexOf(t),r=a,s=0,o=0;if(typeof t!="string")throw new TypeError("Expected substring");for(;a!==-1;)a===r?++s>o&&(o=s):s=1,r=a+t.length,a=n.indexOf(t,r);return o}function cL(e,t){return!!(t.options.fences===!1&&e.value&&!e.lang&&/[^ \r\n]/.test(e.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(e.value))}function uL(e){const t=e.options.fence||"`";if(t!=="`"&&t!=="~")throw new Error("Cannot serialize code with `"+t+"` for `options.fence`, expected `` ` `` or `~`");return t}function dL(e,t,n,a){const r=uL(n),s=e.value||"",o=r==="`"?"GraveAccent":"Tilde";if(cL(e,n)){const m=n.enter("codeIndented"),p=n.indentLines(s,mL);return m(),p}const l=n.createTracker(a),c=r.repeat(Math.max(lL(s,r)+1,3)),u=n.enter("codeFenced");let d=l.move(c);if(e.lang){const m=n.enter(`codeFencedLang${o}`);d+=l.move(n.safe(e.lang,{before:d,after:" ",encode:["`"],...l.current()})),m()}if(e.lang&&e.meta){const m=n.enter(`codeFencedMeta${o}`);d+=l.move(" "),d+=l.move(n.safe(e.meta,{before:d,after:` 9704`,encode:["`"],...l.current()})),m()}return d+=l.move(` 9705`),s&&(d+=l.move(s+` 9706`)),d+=l.move(c),u(),d}function mL(e,t,n){return(n?"":" ")+e}function yf(e){const t=e.options.quote||'"';if(t!=='"'&&t!=="'")throw new Error("Cannot serialize title with `"+t+"` for `options.quote`, expected `\"`, or `'`");return t}function pL(e,t,n,a){const r=yf(n),s=r==='"'?"Quote":"Apostrophe",o=n.enter("definition");let l=n.enter("label");const c=n.createTracker(a);let u=c.move("[");return u+=c.move(n.safe(n.associationId(e),{before:u,after:"]",...c.current()})),u+=c.move("]: "),l(),!e.url||/[\0- \u007F]/.test(e.url)?(l=n.enter("destinationLiteral"),u+=c.move("<"),u+=c.move(n.safe(e.url,{before:u,after:">",...c.current()})),u+=c.move(">")):(l=n.enter("destinationRaw"),u+=c.move(n.safe(e.url,{before:u,after:e.title?" ":` 9707`,...c.current()}))),l(),e.title&&(l=n.enter(`title${s}`),u+=c.move(" "+r),u+=c.move(n.safe(e.title,{before:u,after:r,...c.current()})),u+=c.move(r),l()),o(),u}function hL(e){const t=e.options.emphasis||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize emphasis with `"+t+"` for `options.emphasis`, expected `*`, or `_`");return t}function Js(e){return"&#x"+e.toString(16).toUpperCase()+";"}function kc(e,t,n){const a=pr(e),r=pr(t);return a===void 0?r===void 0?n==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:r===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:a===1?r===void 0?{inside:!1,outside:!1}:r===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:r===void 0?{inside:!1,outside:!1}:r===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}$k.peek=fL;function $k(e,t,n,a){const r=hL(n),s=n.enter("emphasis"),o=n.createTracker(a),l=o.move(r);let c=o.move(n.containerPhrasing(e,{after:r,before:l,...o.current()}));const u=c.charCodeAt(0),d=kc(a.before.charCodeAt(a.before.length-1),u,r);d.inside&&(c=Js(u)+c.slice(1));const m=c.charCodeAt(c.length-1),p=kc(a.after.charCodeAt(0),m,r);p.inside&&(c=c.slice(0,-1)+Js(m));const f=o.move(r);return s(),n.attentionEncodeSurroundingInfo={after:p.outside,before:d.outside},l+c+f}function fL(e,t,n){return n.options.emphasis||"*"}function gL(e,t){let n=!1;return fu(e,function(a){if("value"in a&&/\r?\n|\r/.test(a.value)||a.type==="break")return n=!0,lp}),!!((!e.depth||e.depth<3)&&af(e)&&(t.options.setext||n))}function xL(e,t,n,a){const r=Math.max(Math.min(6,e.depth||1),1),s=n.createTracker(a);if(gL(e,n)){const d=n.enter("headingSetext"),m=n.enter("phrasing"),p=n.containerPhrasing(e,{...s.current(),before:` 9708`,after:` 9709`});return m(),d(),p+` 9710`+(r===1?"=":"-").repeat(p.length-(Math.max(p.lastIndexOf("\r"),p.lastIndexOf(` 9711`))+1))}const o="#".repeat(r),l=n.enter("headingAtx"),c=n.enter("phrasing");s.move(o+" ");let u=n.containerPhrasing(e,{before:"# ",after:` 9712`,...s.current()});return/^[\t ]/.test(u)&&(u=Js(u.charCodeAt(0))+u.slice(1)),u=u?o+" "+u:o,n.options.closeAtx&&(u+=" "+o),c(),l(),u}Yk.peek=yL;function Yk(e){return e.value||""}function yL(){return"<"}Gk.peek=bL;function Gk(e,t,n,a){const r=yf(n),s=r==='"'?"Quote":"Apostrophe",o=n.enter("image");let l=n.enter("label");const c=n.createTracker(a);let u=c.move("![");return u+=c.move(n.safe(e.alt,{before:u,after:"]",...c.current()})),u+=c.move("]("),l(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(l=n.enter("destinationLiteral"),u+=c.move("<"),u+=c.move(n.safe(e.url,{before:u,after:">",...c.current()})),u+=c.move(">")):(l=n.enter("destinationRaw"),u+=c.move(n.safe(e.url,{before:u,after:e.title?" ":")",...c.current()}))),l(),e.title&&(l=n.enter(`title${s}`),u+=c.move(" "+r),u+=c.move(n.safe(e.title,{before:u,after:r,...c.current()})),u+=c.move(r),l()),u+=c.move(")"),o(),u}function bL(){return"!"}Qk.peek=vL;function Qk(e,t,n,a){const r=e.referenceType,s=n.enter("imageReference");let o=n.enter("label");const l=n.createTracker(a);let c=l.move("![");const u=n.safe(e.alt,{before:c,after:"]",...l.current()});c+=l.move(u+"]["),o();const d=n.stack;n.stack=[],o=n.enter("reference");const m=n.safe(n.associationId(e),{before:c,after:"]",...l.current()});return o(),n.stack=d,s(),r==="full"||!u||u!==m?c+=l.move(m+"]"):r==="shortcut"?c=c.slice(0,-1):c+=l.move("]"),c}function vL(){return"!"}Kk.peek=wL;function Kk(e,t,n){let a=e.value||"",r="`",s=-1;for(;new RegExp("(^|[^`])"+r+"([^`]|$)").test(a);)r+="`";for(/[^ \r\n]/.test(a)&&(/^[ \r\n]/.test(a)&&/[ \r\n]$/.test(a)||/^`|`$/.test(a))&&(a=" "+a+" ");++s<n.unsafe.length;){const o=n.unsafe[s],l=n.compilePattern(o);let c;if(o.atBreak)for(;c=l.exec(a);){let u=c.index;a.charCodeAt(u)===10&&a.charCodeAt(u-1)===13&&u--,a=a.slice(0,u)+" "+a.slice(c.index+1)}}return r+a+r}function wL(){return"`"}function Xk(e,t){const n=af(e);return!!(!t.options.resourceLink&&e.url&&!e.title&&e.children&&e.children.length===1&&e.children[0].type==="text"&&(n===e.url||"mailto:"+n===e.url)&&/^[a-z][a-z+.-]+:/i.test(e.url)&&!/[\0- <>\u007F]/.test(e.url))}Zk.peek=kL;function Zk(e,t,n,a){const r=yf(n),s=r==='"'?"Quote":"Apostrophe",o=n.createTracker(a);let l,c;if(Xk(e,n)){const d=n.stack;n.stack=[],l=n.enter("autolink");let m=o.move("<");return m+=o.move(n.containerPhrasing(e,{before:m,after:">",...o.current()})),m+=o.move(">"),l(),n.stack=d,m}l=n.enter("link"),c=n.enter("label");let u=o.move("[");return u+=o.move(n.containerPhrasing(e,{before:u,after:"](",...o.current()})),u+=o.move("]("),c(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(c=n.enter("destinationLiteral"),u+=o.move("<"),u+=o.move(n.safe(e.url,{before:u,after:">",...o.current()})),u+=o.move(">")):(c=n.enter("destinationRaw"),u+=o.move(n.safe(e.url,{before:u,after:e.title?" ":")",...o.current()}))),c(),e.title&&(c=n.enter(`title${s}`),u+=o.move(" "+r),u+=o.move(n.safe(e.title,{before:u,after:r,...o.current()})),u+=o.move(r),c()),u+=o.move(")"),l(),u}function kL(e,t,n){return Xk(e,n)?"<":"["}Jk.peek=AL;function Jk(e,t,n,a){const r=e.referenceType,s=n.enter("linkReference");let o=n.enter("label");const l=n.createTracker(a);let c=l.move("[");const u=n.containerPhrasing(e,{before:c,after:"]",...l.current()});c+=l.move(u+"]["),o();const d=n.stack;n.stack=[],o=n.enter("reference");const m=n.safe(n.associationId(e),{before:c,after:"]",...l.current()});return o(),n.stack=d,s(),r==="full"||!u||u!==m?c+=l.move(m+"]"):r==="shortcut"?c=c.slice(0,-1):c+=l.move("]"),c}function AL(){return"["}function bf(e){const t=e.options.bullet||"*";if(t!=="*"&&t!=="+"&&t!=="-")throw new Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}function CL(e){const t=bf(e),n=e.options.bulletOther;if(!n)return t==="*"?"-":"*";if(n!=="*"&&n!=="+"&&n!=="-")throw new Error("Cannot serialize items with `"+n+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(n===t)throw new Error("Expected `bullet` (`"+t+"`) and `bulletOther` (`"+n+"`) to be different");return n}function EL(e){const t=e.options.bulletOrdered||".";if(t!=="."&&t!==")")throw new Error("Cannot serialize items with `"+t+"` for `options.bulletOrdered`, expected `.` or `)`");return t}function eA(e){const t=e.options.rule||"*";if(t!=="*"&&t!=="-"&&t!=="_")throw new Error("Cannot serialize rules with `"+t+"` for `options.rule`, expected `*`, `-`, or `_`");return t}function NL(e,t,n,a){const r=n.enter("list"),s=n.bulletCurrent;let o=e.ordered?EL(n):bf(n);const l=e.ordered?o==="."?")":".":CL(n);let c=t&&n.bulletLastUsed?o===n.bulletLastUsed:!1;if(!e.ordered){const d=e.children?e.children[0]:void 0;if((o==="*"||o==="-")&&d&&(!d.children||!d.children[0])&&n.stack[n.stack.length-1]==="list"&&n.stack[n.stack.length-2]==="listItem"&&n.stack[n.stack.length-3]==="list"&&n.stack[n.stack.length-4]==="listItem"&&n.indexStack[n.indexStack.length-1]===0&&n.indexStack[n.indexStack.length-2]===0&&n.indexStack[n.indexStack.length-3]===0&&(c=!0),eA(n)===o&&d){let m=-1;for(;++m<e.children.length;){const p=e.children[m];if(p&&p.type==="listItem"&&p.children&&p.children[0]&&p.children[0].type==="thematicBreak"){c=!0;break}}}}c&&(o=l),n.bulletCurrent=o;const u=n.containerFlow(e,a);return n.bulletLastUsed=o,n.bulletCurrent=s,r(),u}function TL(e){const t=e.options.listItemIndent||"one";if(t!=="tab"&&t!=="one"&&t!=="mixed")throw new Error("Cannot serialize items with `"+t+"` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`");return t}function SL(e,t,n,a){const r=TL(n);let s=n.bulletCurrent||bf(n);t&&t.type==="list"&&t.ordered&&(s=(typeof t.start=="number"&&t.start>-1?t.start:1)+(n.options.incrementListMarker===!1?0:t.children.indexOf(e))+s);let o=s.length+1;(r==="tab"||r==="mixed"&&(t&&t.type==="list"&&t.spread||e.spread))&&(o=Math.ceil(o/4)*4);const l=n.createTracker(a);l.move(s+" ".repeat(o-s.length)),l.shift(o);const c=n.enter("listItem"),u=n.indentLines(n.containerFlow(e,l.current()),d);return c(),u;function d(m,p,f){return p?(f?"":" ".repeat(o))+m:(f?s:s+" ".repeat(o-s.length))+m}}function IL(e,t,n,a){const r=n.enter("paragraph"),s=n.enter("phrasing"),o=n.containerPhrasing(e,a);return s(),r(),o}const jL=pu(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function PL(e,t,n,a){return(e.children.some(function(o){return jL(o)})?n.containerPhrasing:n.containerFlow).call(n,e,a)}function ML(e){const t=e.options.strong||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize strong with `"+t+"` for `options.strong`, expected `*`, or `_`");return t}tA.peek=DL;function tA(e,t,n,a){const r=ML(n),s=n.enter("strong"),o=n.createTracker(a),l=o.move(r+r);let c=o.move(n.containerPhrasing(e,{after:r,before:l,...o.current()}));const u=c.charCodeAt(0),d=kc(a.before.charCodeAt(a.before.length-1),u,r);d.inside&&(c=Js(u)+c.slice(1));const m=c.charCodeAt(c.length-1),p=kc(a.after.charCodeAt(0),m,r);p.inside&&(c=c.slice(0,-1)+Js(m));const f=o.move(r+r);return s(),n.attentionEncodeSurroundingInfo={after:p.outside,before:d.outside},l+c+f}function DL(e,t,n){return n.options.strong||"*"}function RL(e,t,n,a){return n.safe(e.value,a)}function OL(e){const t=e.options.ruleRepetition||3;if(t<3)throw new Error("Cannot serialize rules with repetition `"+t+"` for `options.ruleRepetition`, expected `3` or more");return t}
vendor: 5,907 bytes, lines 9712-9714
9712function _L(e,t,n){const a=(eA(n)+(n.options.ruleSpaces?" ":"")).repeat(OL(n));return n.options.ruleSpaces?a.slice(0,-1):a}const nA={blockquote:rL,break:Ty,code:dL,definition:pL,emphasis:$k,hardBreak:Ty,heading:xL,html:Yk,image:Gk,imageReference:Qk,inlineCode:Kk,link:Zk,linkReference:Jk,list:NL,listItem:SL,paragraph:IL,root:PL,strong:tA,text:RL,thematicBreak:_L};function LL(){return{enter:{table:zL,tableData:Sy,tableHeader:Sy,tableRow:BL},exit:{codeText:FL,table:qL,tableData:Sd,tableHeader:Sd,tableRow:Sd}}}function zL(e){const t=e._align;this.enter({type:"table",align:t.map(function(n){return n==="none"?null:n}),children:[]},e),this.data.inTable=!0}function qL(e){this.exit(e),this.data.inTable=void 0}function BL(e){this.enter({type:"tableRow",children:[]},e)}function Sd(e){this.exit(e)}function Sy(e){this.enter({type:"tableCell",children:[]},e)}function FL(e){let t=this.resume();this.data.inTable&&(t=t.replace(/\\([\\|])/g,HL));const n=this.stack[this.stack.length-1];n.type,n.value=t,this.exit(e)}function HL(e,t){return t==="|"?t:e}function UL(e){const t=e||{},n=t.tableCellPadding,a=t.tablePipeAlign,r=t.stringLength,s=n?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:` 9713`,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:p,table:o,tableCell:c,tableRow:l}};function o(f,g,y,w){return u(d(f,y,w),f.align)}function l(f,g,y,w){const x=m(f,y,w),b=u([x]);return b.slice(0,b.indexOf(` 9714`))}function c(f,g,y,w){const x=y.enter("tableCell"),b=y.enter("phrasing"),v=y.containerPhrasing(f,{...w,before:s,after:s});return b(),x(),v}function u(f,g){return aL(f,{align:g,alignDelimiters:a,padding:n,stringLength:r})}function d(f,g,y){const w=f.children;let x=-1;const b=[],v=g.enter("table");for(;++x<w.length;)b[x]=m(w[x],g,y);return v(),b}function m(f,g,y){const w=f.children;let x=-1;const b=[],v=g.enter("tableRow");for(;++x<w.length;)b[x]=c(w[x],f,g,y);return v(),b}function p(f,g,y){let w=nA.inlineCode(f,g,y);return y.stack.includes("tableCell")&&(w=w.replace(/\|/g,"\\$&")),w}}function VL(){return{exit:{taskListCheckValueChecked:Iy,taskListCheckValueUnchecked:Iy,paragraph:$L}}}function WL(){return{unsafe:[{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{listItem:YL}}}function Iy(e){const t=this.stack[this.stack.length-2];t.type,t.checked=e.type==="taskListCheckValueChecked"}function $L(e){const t=this.stack[this.stack.length-2];if(t&&t.type==="listItem"&&typeof t.checked=="boolean"){const n=this.stack[this.stack.length-1];n.type;const a=n.children[0];if(a&&a.type==="text"){const r=t.children;let s=-1,o;for(;++s<r.length;){const l=r[s];if(l.type==="paragraph"){o=l;break}}o===n&&(a.value=a.value.slice(1),a.value.length===0?n.children.shift():n.position&&a.position&&typeof a.position.start.offset=="number"&&(a.position.start.column++,a.position.start.offset++,n.position.start=Object.assign({},a.position.start)))}}this.exit(e)}function YL(e,t,n,a){const r=e.children[0],s=typeof e.checked=="boolean"&&r&&r.type==="paragraph",o="["+(e.checked?"x":" ")+"] ",l=n.createTracker(a);s&&l.move(o);let c=nA.listItem(e,t,n,{...a,...l.current()});return s&&(c=c.replace(/^(?:[*+-]|\d+\.)([\r\n]| {1,3})/,u)),c;function u(d){return d+o}}function GL(){return[N_(),Y_(),X_(),LL(),VL()]}function QL(e){return{extensions:[T_(),G_(e),Z_(),UL(e),WL()]}}const KL={tokenize:nz,partial:!0},aA={tokenize:az,partial:!0},iA={tokenize:iz,partial:!0},rA={tokenize:rz,partial:!0},XL={tokenize:sz,partial:!0},sA={name:"wwwAutolink",tokenize:ez,previous:lA},oA={name:"protocolAutolink",tokenize:tz,previous:cA},ra={name:"emailAutolink",tokenize:JL,previous:uA},On={};function ZL(){return{text:On}}let Wa=48;for(;Wa<123;)On[Wa]=ra,Wa++,Wa===58?Wa=65:Wa===91&&(Wa=97);On[43]=ra;On[45]=ra;On[46]=ra;On[95]=ra;On[72]=[ra,oA];On[104]=[ra,oA];On[87]=[ra,sA];On[119]=[ra,sA];function JL(e,t,n){const a=this;let r,s;return o;function o(m){return!xp(m)||!uA.call(a,a.previous)||vf(a.events)?n(m):(e.enter("literalAutolink"),e.enter("literalAutolinkEmail"),l(m))}function l(m){return xp(m)?(e.consume(m),l):m===64?(e.consume(m),c):n(m)}function c(m){return m===46?e.check(XL,d,u)(m):m===45||m===95||lt(m)?(s=!0,e.consume(m),c):d(m)}function u(m){return e.consume(m),r=!0,c}function d(m){return s&&r&&ft(a.previous)?(e.exit("literalAutolinkEmail"),e.exit("literalAutolink"),t(m)):n(m)}}function ez(e,t,n){const a=this;return r;function r(o){return o!==87&&o!==119||!lA.call(a,a.previous)||vf(a.events)?n(o):(e.enter("literalAutolink"),e.enter("literalAutolinkWww"),e.check(KL,e.attempt(aA,e.attempt(iA,s),n),n)(o))}function s(o){return e.exit("literalAutolinkWww"),e.exit("literalAutolink"),t(o)}}function tz(e,t,n){const a=this;let r="",s=!1;return o;function o(m){return(m===72||m===104)&&cA.call(a,a.previous)&&!vf(a.events)?(e.enter("literalAutolink"),e.enter("literalAutolinkHttp"),r+=String.fromCodePoint(m),e.consume(m),l):n(m)}function l(m){if(ft(m)&&r.length<5)return r+=String.fromCodePoint(m),e.consume(m),l;if(m===58){const p=r.toLowerCase();if(p==="http"||p==="https")return e.consume(m),c}return n(m)}function c(m){return m===47?(e.consume(m),s?u:(s=!0,c)):n(m)}function u(m){return m===null||xc(m)||Ae(m)||xi(m)||uu(m)?n(m):e.attempt(aA,e.attempt(iA,d),n)(m)}function d(m){return e.exit("literalAutolinkHttp"),e.exit("literalAutolink"),t(m)}}function nz(e,t,n){let a=0;return r;function r(o){return(o===87||o===119)&&a<3?(a++,e.consume(o),r):o===46&&a===3?(e.consume(o),s):n(o)}function s(o){return o===null?n(o):t(o)}}function az(e,t,n){let a,r,s;return o;function o(u){return u===46||u===95?e.check(rA,c,l)(u):u===null||Ae(u)||xi(u)||u!==45&&uu(u)?c(u):(s=!0,e.consume(u),o)}function l(u){return u===95?a=!0:(r=a,a=void 0),e.consume(u),o}function c(u){return r||a||!s?n(u):t(u)}}function iz(e,t){let n=0,a=0;return r;
vendor: 6,821 bytes, line 9714
9714function r(o){return o===40?(n++,e.consume(o),r):o===41&&a<n?s(o):o===33||o===34||o===38||o===39||o===41||o===42||o===44||o===46||o===58||o===59||o===60||o===63||o===93||o===95||o===126?e.check(rA,t,s)(o):o===null||Ae(o)||xi(o)?t(o):(e.consume(o),r)}function s(o){return o===41&&a++,e.consume(o),r}}function rz(e,t,n){return a;function a(l){return l===33||l===34||l===39||l===41||l===42||l===44||l===46||l===58||l===59||l===63||l===95||l===126?(e.consume(l),a):l===38?(e.consume(l),s):l===93?(e.consume(l),r):l===60||l===null||Ae(l)||xi(l)?t(l):n(l)}function r(l){return l===null||l===40||l===91||Ae(l)||xi(l)?t(l):a(l)}function s(l){return ft(l)?o(l):n(l)}function o(l){return l===59?(e.consume(l),a):ft(l)?(e.consume(l),o):n(l)}}function sz(e,t,n){return a;function a(s){return e.consume(s),r}function r(s){return lt(s)?n(s):t(s)}}function lA(e){return e===null||e===40||e===42||e===95||e===91||e===93||e===126||Ae(e)}function cA(e){return!ft(e)}function uA(e){return!(e===47||xp(e))}function xp(e){return e===43||e===45||e===46||e===95||lt(e)}function vf(e){let t=e.length,n=!1;for(;t--;){const a=e[t][1];if((a.type==="labelLink"||a.type==="labelImage")&&!a._balanced){n=!0;break}if(a._gfmAutolinkLiteralWalkedInto){n=!1;break}}return e.length>0&&!n&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),n}const oz={tokenize:fz,partial:!0};function lz(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:mz,continuation:{tokenize:pz},exit:hz}},text:{91:{name:"gfmFootnoteCall",tokenize:dz},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:cz,resolveTo:uz}}}}function cz(e,t,n){const a=this;let r=a.events.length;const s=a.parser.gfmFootnotes||(a.parser.gfmFootnotes=[]);let o;for(;r--;){const c=a.events[r][1];if(c.type==="labelImage"){o=c;break}if(c.type==="gfmFootnoteCall"||c.type==="labelLink"||c.type==="label"||c.type==="image"||c.type==="link")break}return l;function l(c){if(!o||!o._balanced)return n(c);const u=hn(a.sliceSerialize({start:o.end,end:a.now()}));return u.codePointAt(0)!==94||!s.includes(u.slice(1))?n(c):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(c),e.exit("gfmFootnoteCallLabelMarker"),t(c))}}function uz(e,t){let n=e.length;for(;n--;)if(e[n][1].type==="labelImage"&&e[n][0]==="enter"){e[n][1];break}e[n+1][1].type="data",e[n+3][1].type="gfmFootnoteCallLabelMarker";const a={type:"gfmFootnoteCall",start:Object.assign({},e[n+3][1].start),end:Object.assign({},e[e.length-1][1].end)},r={type:"gfmFootnoteCallMarker",start:Object.assign({},e[n+3][1].end),end:Object.assign({},e[n+3][1].end)};r.end.column++,r.end.offset++,r.end._bufferIndex++;const s={type:"gfmFootnoteCallString",start:Object.assign({},r.end),end:Object.assign({},e[e.length-1][1].start)},o={type:"chunkString",contentType:"string",start:Object.assign({},s.start),end:Object.assign({},s.end)},l=[e[n+1],e[n+2],["enter",a,t],e[n+3],e[n+4],["enter",r,t],["exit",r,t],["enter",s,t],["enter",o,t],["exit",o,t],["exit",s,t],e[e.length-2],e[e.length-1],["exit",a,t]];return e.splice(n,e.length-n+1,...l),e}function dz(e,t,n){const a=this,r=a.parser.gfmFootnotes||(a.parser.gfmFootnotes=[]);let s=0,o;return l;function l(m){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(m),e.exit("gfmFootnoteCallLabelMarker"),c}function c(m){return m!==94?n(m):(e.enter("gfmFootnoteCallMarker"),e.consume(m),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",u)}function u(m){if(s>999||m===93&&!o||m===null||m===91||Ae(m))return n(m);if(m===93){e.exit("chunkString");const p=e.exit("gfmFootnoteCallString");return r.includes(hn(a.sliceSerialize(p)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(m),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t):n(m)}return Ae(m)||(o=!0),s++,e.consume(m),m===92?d:u}function d(m){return m===91||m===92||m===93?(e.consume(m),s++,u):u(m)}}function mz(e,t,n){const a=this,r=a.parser.gfmFootnotes||(a.parser.gfmFootnotes=[]);let s,o=0,l;return c;function c(g){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(g),e.exit("gfmFootnoteDefinitionLabelMarker"),u}function u(g){return g===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(g),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",d):n(g)}function d(g){if(o>999||g===93&&!l||g===null||g===91||Ae(g))return n(g);if(g===93){e.exit("chunkString");const y=e.exit("gfmFootnoteDefinitionLabelString");return s=hn(a.sliceSerialize(y)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(g),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),p}return Ae(g)||(l=!0),o++,e.consume(g),g===92?m:d}function m(g){return g===91||g===92||g===93?(e.consume(g),o++,d):d(g)}function p(g){return g===58?(e.enter("definitionMarker"),e.consume(g),e.exit("definitionMarker"),r.includes(s)||r.push(s),he(e,f,"gfmFootnoteDefinitionWhitespace")):n(g)}function f(g){return t(g)}}function pz(e,t,n){return e.check(bo,t,e.attempt(oz,t,n))}function hz(e){e.exit("gfmFootnoteDefinition")}function fz(e,t,n){const a=this;return he(e,r,"gfmFootnoteDefinitionIndent",5);function r(s){const o=a.events[a.events.length-1];return o&&o[1].type==="gfmFootnoteDefinitionIndent"&&o[2].sliceSerialize(o[1],!0).length===4?t(s):n(s)}}function gz(e){let n=(e||{}).singleTilde;const a={name:"strikethrough",tokenize:s,resolveAll:r};return n==null&&(n=!0),{text:{126:a},insideSpan:{null:[a]},attentionMarkers:{null:[126]}};function r(o,l){let c=-1;for(;++c<o.length;)if(o[c][0]==="enter"&&o[c][1].type==="strikethroughSequenceTemporary"&&o[c][1]._close){let u=c;for(;u--;)if(o[u][0]==="exit"&&o[u][1].type==="strikethroughSequenceTemporary"&&o[u][1]._open&&o[c][1].end.offset-o[c][1].start.offset===o[u][1].end.offset-o[u][1].start.offset){o[c][1].type="strikethroughSequence",o[u][1].type="strikethroughSequence";const d={type:"strikethrough",start:Object.assign({},o[u][1].start),end:Object.assign({},o[c][1].end)},m={type:"strikethroughText",start:Object.assign({},o[u][1].end),end:Object.assign({},o[c][1].start)},p=[["enter",d,l],["enter",o[u][1],l],["exit",o[u][1],l],["enter",m,l]],f=l.parser.constructs.insideSpan.null;f&&Lt(p,p.length,0,du(f,o.slice(u+1,c),l)),Lt(p,p.length,0,[["exit",m,l],["enter",o[c][1],l],["exit",o[c][1],l],["exit",d,l]]),Lt(o,u-1,c-u+3,p),c=u+p.length-2;break}}for(c=-1;++c<o.length;)o[c][1].type==="strikethroughSequenceTemporary"&&(o[c][1].type="data");return o}function s(o,l,c){const u=this.previous,d=this.events;let m=0;return p;function p(g){return u===126&&d[d.length-1][1].type!=="characterEscape"?c(g):(o.enter("strikethroughSequenceTemporary"),f(g))}function f(g){const y=pr(u);if(g===126)return m>1?c(g):(o.consume(g),m++,f);
vendor: 7,184 bytes, line 9714
9714if(m<2&&!n)return c(g);const w=o.exit("strikethroughSequenceTemporary"),x=pr(g);return w._open=!x||x===2&&!!y,w._close=!y||y===2&&!!x,l(g)}}}class xz{constructor(){this.map=[],this.index=new Map}add(t,n,a){yz(this,t,n,a)}consume(t){if(this.map.sort(function(s,o){return s[0]-o[0]}),this.map.length===0)return;let n=this.map.length;const a=[];for(;n>0;)n-=1,a.push(t.slice(this.map[n][0]+this.map[n][1]),this.map[n][2]),t.length=this.map[n][0];a.push(t.slice()),t.length=0;let r=a.pop();for(;r;){for(const s of r)t.push(s);r=a.pop()}this.map.length=0,this.index.clear()}}function yz(e,t,n,a){if(n===0&&a.length===0)return;const r=e.index.get(t);if(r){r[1]+=n,r[2].push(...a);return}const s=[t,n,a];e.map.push(s),e.index.set(t,s)}function bz(e,t){let n=!1;const a=[];for(;t<e.length;){const r=e[t];if(n){if(r[0]==="enter")r[1].type==="tableContent"&&a.push(e[t+1][1].type==="tableDelimiterMarker"?"left":"none");else if(r[1].type==="tableContent"){if(e[t-1][1].type==="tableDelimiterMarker"){const s=a.length-1;a[s]=a[s]==="left"?"center":"right"}}else if(r[1].type==="tableDelimiterRow")break}else r[0]==="enter"&&r[1].type==="tableDelimiterRow"&&(n=!0);t+=1}return a}function vz(){return{flow:{null:{name:"table",tokenize:wz,resolveAll:kz}}}}function wz(e,t,n){const a=this;let r=0,s=0,o;return l;function l(P){let Y=a.events.length-1;for(;Y>-1;){const{type:B}=a.events[Y][1];if(B==="lineEnding"||B==="linePrefix")Y--;else break}const K=Y>-1?a.events[Y][1].type:null,ie=K==="tableHead"||K==="tableRow"?C:c;return ie===C&&a.parser.lazy[a.now().line]?n(P):ie(P)}function c(P){return e.enter("tableHead"),e.enter("tableRow"),u(P)}function u(P){return P===124||(o=!0,s+=1),d(P)}function d(P){return P===null?n(P):ne(P)?s>1?(s=0,a.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(P),e.exit("lineEnding"),f):n(P):ce(P)?he(e,d,"whitespace")(P):(s+=1,o&&(o=!1,r+=1),P===124?(e.enter("tableCellDivider"),e.consume(P),e.exit("tableCellDivider"),o=!0,d):(e.enter("data"),m(P)))}function m(P){return P===null||P===124||Ae(P)?(e.exit("data"),d(P)):(e.consume(P),P===92?p:m)}function p(P){return P===92||P===124?(e.consume(P),m):m(P)}function f(P){return a.interrupt=!1,a.parser.lazy[a.now().line]?n(P):(e.enter("tableDelimiterRow"),o=!1,ce(P)?he(e,g,"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(P):g(P))}function g(P){return P===45||P===58?w(P):P===124?(o=!0,e.enter("tableCellDivider"),e.consume(P),e.exit("tableCellDivider"),y):I(P)}function y(P){return ce(P)?he(e,w,"whitespace")(P):w(P)}function w(P){return P===58?(s+=1,o=!0,e.enter("tableDelimiterMarker"),e.consume(P),e.exit("tableDelimiterMarker"),x):P===45?(s+=1,x(P)):P===null||ne(P)?N(P):I(P)}function x(P){return P===45?(e.enter("tableDelimiterFiller"),b(P)):I(P)}function b(P){return P===45?(e.consume(P),b):P===58?(o=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(P),e.exit("tableDelimiterMarker"),v):(e.exit("tableDelimiterFiller"),v(P))}function v(P){return ce(P)?he(e,N,"whitespace")(P):N(P)}function N(P){return P===124?g(P):P===null||ne(P)?!o||r!==s?I(P):(e.exit("tableDelimiterRow"),e.exit("tableHead"),t(P)):I(P)}function I(P){return n(P)}function C(P){return e.enter("tableRow"),R(P)}function R(P){return P===124?(e.enter("tableCellDivider"),e.consume(P),e.exit("tableCellDivider"),R):P===null||ne(P)?(e.exit("tableRow"),t(P)):ce(P)?he(e,R,"whitespace")(P):(e.enter("data"),O(P))}function O(P){return P===null||P===124||Ae(P)?(e.exit("data"),R(P)):(e.consume(P),P===92?H:O)}function H(P){return P===92||P===124?(e.consume(P),O):O(P)}}function kz(e,t){let n=-1,a=!0,r=0,s=[0,0,0,0],o=[0,0,0,0],l=!1,c=0,u,d,m;const p=new xz;for(;++n<e.length;){const f=e[n],g=f[1];f[0]==="enter"?g.type==="tableHead"?(l=!1,c!==0&&(jy(p,t,c,u,d),d=void 0,c=0),u={type:"table",start:Object.assign({},g.start),end:Object.assign({},g.end)},p.add(n,0,[["enter",u,t]])):g.type==="tableRow"||g.type==="tableDelimiterRow"?(a=!0,m=void 0,s=[0,0,0,0],o=[0,n+1,0,0],l&&(l=!1,d={type:"tableBody",start:Object.assign({},g.start),end:Object.assign({},g.end)},p.add(n,0,[["enter",d,t]])),r=g.type==="tableDelimiterRow"?2:d?3:1):r&&(g.type==="data"||g.type==="tableDelimiterMarker"||g.type==="tableDelimiterFiller")?(a=!1,o[2]===0&&(s[1]!==0&&(o[0]=o[1],m=Zo(p,t,s,r,void 0,m),s=[0,0,0,0]),o[2]=n)):g.type==="tableCellDivider"&&(a?a=!1:(s[1]!==0&&(o[0]=o[1],m=Zo(p,t,s,r,void 0,m)),s=o,o=[s[1],n,0,0])):g.type==="tableHead"?(l=!0,c=n):g.type==="tableRow"||g.type==="tableDelimiterRow"?(c=n,s[1]!==0?(o[0]=o[1],m=Zo(p,t,s,r,n,m)):o[1]!==0&&(m=Zo(p,t,o,r,n,m)),r=0):r&&(g.type==="data"||g.type==="tableDelimiterMarker"||g.type==="tableDelimiterFiller")&&(o[3]=n)}for(c!==0&&jy(p,t,c,u,d),p.consume(t.events),n=-1;++n<t.events.length;){const f=t.events[n];f[0]==="enter"&&f[1].type==="table"&&(f[1]._align=bz(t.events,n))}return e}function Zo(e,t,n,a,r,s){const o=a===1?"tableHeader":a===2?"tableDelimiter":"tableData",l="tableContent";n[0]!==0&&(s.end=Object.assign({},Mi(t.events,n[0])),e.add(n[0],0,[["exit",s,t]]));const c=Mi(t.events,n[1]);if(s={type:o,start:Object.assign({},c),end:Object.assign({},c)},e.add(n[1],0,[["enter",s,t]]),n[2]!==0){const u=Mi(t.events,n[2]),d=Mi(t.events,n[3]),m={type:l,start:Object.assign({},u),end:Object.assign({},d)};if(e.add(n[2],0,[["enter",m,t]]),a!==2){const p=t.events[n[2]],f=t.events[n[3]];if(p[1].end=Object.assign({},f[1].end),p[1].type="chunkText",p[1].contentType="text",n[3]>n[2]+1){const g=n[2]+1,y=n[3]-n[2]-1;e.add(g,y,[])}}e.add(n[3]+1,0,[["exit",m,t]])}return r!==void 0&&(s.end=Object.assign({},Mi(t.events,r)),e.add(r,0,[["exit",s,t]]),s=void 0),s}function jy(e,t,n,a,r){const s=[],o=Mi(t.events,n);r&&(r.end=Object.assign({},o),s.push(["exit",r,t])),a.end=Object.assign({},o),s.push(["exit",a,t]),e.add(n+1,0,s)}function Mi(e,t){const n=e[t],a=n[0]==="enter"?"start":"end";return n[1][a]}const Az={name:"tasklistCheck",tokenize:Ez};function Cz(){return{text:{91:Az}}}function Ez(e,t,n){const a=this;return r;function r(c){return a.previous!==null||!a._gfmTasklistFirstContentOfListItem?n(c):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(c),e.exit("taskListCheckMarker"),s)}function s(c){return Ae(c)?(e.enter("taskListCheckValueUnchecked"),e.consume(c),e.exit("taskListCheckValueUnchecked"),o):c===88||c===120?(e.enter("taskListCheckValueChecked"),e.consume(c),e.exit("taskListCheckValueChecked"),o):n(c)}function o(c){return c===93?(e.enter("taskListCheckMarker"),e.consume(c),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),l):n(c)}function l(c){return ne(c)?t(c):ce(c)?e.check({tokenize:Nz},t,n)(c):n(c)}}function Nz(e,t,n){return he(e,a,"whitespace");function a(r){return r===null?n(r):t(r)}}function Tz(e){return L2([ZL(),lz(),gz(e),vz(),Cz()])}const Sz={};function Iz(e){const t=this,n=e||Sz,a=t.data(),r=a.micromarkExtensions||(a.micromarkExtensions=[]),s=a.fromMarkdownExtensions||(a.fromMarkdownExtensions=[]),o=a.toMarkdownExtensions||(a.toMarkdownExtensions=[]);r.push(Tz(n)),s.push(GL()),o.push(QL(n))}function jz(){const{t:e,language:t}=su(),{slug:n}=WT(),a=T.useMemo(()=>{const I=gc[t];return I&&I.length>0?I:gc.en},[t]),r=T.useMemo(()=>a.find(I=>I.slug===n),[n,a]),s=T.useMemo(()=>
9714{if(!r||a.length<=1)return[];const I=a.filter(O=>O.slug!==n&&O.category===r.category);if(I.length>=3)return I.slice(0,3);const C=a.filter(O=>O.slug!==n&&O.category!==r.category);return[...I,...C].slice(0,3)},[r,n,a]);if(T.useEffect(()=>{r&&(v5(r.title,r.slug,r.category),window.scrollTo(0,0))},[r]),!r)return i.jsx(sS,{to:"/blog",replace:!0});const o=r.title,l=r.excerpt,c=r.date,u=r.author,d=r.authorImage||"/default-avatar.png",m=r.authorTitle||"Team Member",p=r.authorBio||`${u} is a team member at Selent.`,f=r.coverImage,g=r.category,y=r.readTime,w=r.content||"",x=r.tags||[],b={"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:"https://selent.ai"},{"@type":"ListItem",position:2,name:"Blog",item:"https://selent.ai/blog"},{"@type":"ListItem",position:3,name:o,item:`https://selent.ai/blog/${n}`}]},N={"@context":"https://schema.org","@graph":[{"@context":"https://schema.org","@type":"BlogPosting",headline:o,description:l,author:{"@type":"Person",name:u,jobTitle:m},datePublished:c,dateModified:c,image:f,publisher:{"@type":"Organization",name:"Selent",logo:{"@type":"ImageObject",url:"https://selent.ai/logo_white.png"}},mainEntityOfPage:{"@type":"WebPage","@id":`https://selent.ai/blog/${n}`}},b]};return i.jsxs(i.Fragment,{children:[i.jsx(it,{title:o,description:l,keywords:x.length>0?x.join(", "):"network management, cisco meraki, AI automation, configuration backup",url:`https://selent.ai/blog/${n}`,type:"article",author:u,publishedTime:c,image:f,structuredData:N}),i.jsxs("div",{className:"w-full min-h-full font-sans text-white bg-dark-base custom-scrollbar noise-overlay",children:[i.jsx(fo,{}),i.jsxs("main",{className:"w-full relative",children:[i.jsx(pe,{opacity:.01}),i.jsx("div",{className:"relative z-10",children:i.jsx("div",{className:"max-w-3xl mx-auto px-4 sm:px-6 lg:px-8 py-8",children:i.jsx(M.div,{initial:{opacity:0,x:-20},animate:{opacity:1,x:0},transition:{duration:.6},children:i.jsxs(Ne,{to:"/blog",className:"inline-flex items-center text-sm text-gray-400 hover:text-accent-cyan transition-colors group",onClick:()=>Tl("blog",`blog/${n}`),children:[i.jsx("div",{className:"p-2 glass-card mr-2 group-hover:border-accent-cyan/50 transition-colors",children:i.jsx(ms,{className:"h-4 w-4"})}),e.blogPage.backToBlog]})})})}),i.jsx("article",{className:"relative z-10 pb-20",children:i.jsxs("div",{className:"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8",children:[i.jsx(M.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.6,delay:.1},className:"rounded-xl overflow-hidden mb-10 border border-dark-border/50",children:i.jsx("img",{src:f,alt:o,className:"w-full h-80 object-cover"})}),i.jsx(T5,{title:o,date:c,author:u,authorImage:d,category:g,readTime:y}),i.jsx(M.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.6,delay:.3},className:"bg-dark-elevated/50 backdrop-blur-sm rounded-2xl p-8 md:p-12 border border-dark-border/30",children:i.jsx("div",{className:"prose prose-xl prose-invert max-w-none",children:i.jsx(iR,{remarkPlugins:[Iz],rehypePlugins:[v_],components:{h1:({children:I})=>i.jsxs("h1",{className:"text-4xl sm:text-5xl font-bold text-white mt-16 mb-8 first:mt-0 relative",children:[i.jsx("span",{className:"relative z-10",children:I}),i.jsx(M.div,{className:"absolute bottom-0 left-0 w-32 h-1 bg-gradient-to-r from-accent-cyan to-accent-purple",initial:{width:0},whileInView:{width:128},transition:{duration:.6,delay:.2},viewport:{once:!0}})]}),h2:({children:I})=>i.jsxs("h2",{className:"text-3xl sm:text-4xl font-bold text-white mt-14 mb-6 relative",children:[i.jsx("span",{className:"relative z-10",children:I}),i.jsx(M.div,{className:"absolute bottom-0 left-0 w-24 h-1 bg-gradient-to-r from-accent-cyan to-accent-purple",initial:{width:0},whileInView:{width:96},transition:{duration:.6,delay:.2},viewport:{once:!0}})]}),h3:({children:I})=>i.jsx("h3",{className:"text-2xl sm:text-3xl font-bold text-white mt-12 mb-4",children:I}),h4:({children:I})=>i.jsx("h4",{className:"text-xl sm:text-2xl font-semibold text-white mt-10 mb-3",children:I}),p:({children:I})=>i.jsx("p",{className:"text-gray-300 leading-[1.8] mb-6 text-lg",children:I}),a:({href:I,children:C})=>i.jsx("a",{href:I,className:"text-accent-cyan font-medium underline decoration-accent-cyan/30 underline-offset-2 hover:
9714decoration-accent-cyan transition-all duration-200",children:C}),strong:({children:I})=>i.jsx("strong",{className:"text-white font-semibold",children:I}),em:({children:I})=>i.jsx("em",{className:"text-gray-200 italic",children:I}),ul:({children:I})=>i.jsx("ul",{className:"my-6 space-y-3",children:I}),ol:({children:I})=>i.jsx("ol",{className:"my-6 space-y-3",children:I}),li:({children:I})=>i.jsx("li",{className:"text-gray-300 leading-relaxed pl-6 relative before:content-[''] before:absolute before:left-0 before:top-[0.6em] before:w-2 before:h-2 before:bg-accent-cyan before:rounded-full",children:I}),blockquote:({children:I})=>i.jsxs("blockquote",{className:"relative my-10 px-8 py-6 glass-card rounded-lg border-l-4 border-accent-cyan",children:[i.jsx("div",{className:"absolute -left-3 top-6 w-6 h-6 bg-dark-base rounded-full flex items-center justify-center border-2 border-accent-cyan",children:i.jsx("svg",{className:"w-4 h-4 text-accent-cyan",fill:"currentColor",viewBox:"0 0 20 20",children:i.jsx("path",{fillRule:"evenodd",d:"M18 10c0 3.866-3.582 7-8 7a8.841 8.841 0 01-4.083-.98L2 17l1.338-3.123C2.493 12.767 2 11.434 2 10c0-3.866 3.582-7 8-7s8 3.134 8 7zM7 9H5v2h2V9zm8 0h-2v2h2V9zM9 9h2v2H9V9z",clipRule:"evenodd"})})}),i.jsx("div",{className:"text-gray-300 italic pl-2",children:I})]}),code:({children:I,...C})=>!C.className?i.jsx("code",{className:"bg-dark-card text-accent-purple px-1.5 py-0.5 rounded text-sm font-mono border border-dark-border",children:I}):i.jsx("code",{className:"block font-mono text-sm",children:I}),pre:({children:I})=>{const C=O=>{var H;return typeof O=="string"?O:Array.isArray(O)?O.map(C).join(""):(H=O==null?void 0:O.props)!=null&&H.children?C(O.props.children):""},R=C(I);return i.jsxs("div",{className:"relative group my-8",children:[i.jsx("div",{className:"absolute top-3 right-3 z-10 opacity-0 group-hover:opacity-100 transition-opacity duration-200",children:i.jsx(S5,{text:R})}),i.jsx("pre",{className:"bg-dark-card text-gray-300 p-6 rounded-xl overflow-x-auto border border-dark-border",children:I})]})},hr:()=>i.jsx("hr",{className:"my-12 border-0 h-px bg-gradient-to-r from-transparent via-dark-border to-transparent"}),img:({src:I,alt:C})=>i.jsxs("figure",{className:"my-10",children:[i.jsx("img",{src:I,alt:C,className:"rounded-xl border border-dark-border w-full hover:border-accent-cyan/50 transition-all duration-300"}),C&&i.jsx("figcaption",{className:"mt-3 text-sm text-gray-500 text-center italic",children:C})]}),table:({children:I})=>i.jsx("div",{className:"my-8 overflow-hidden rounded-lg border border-dark-border",children:i.jsx("table",{className:"min-w-full divide-y divide-dark-border",children:I})}),thead:({children:I})=>i.jsx("thead",{className:"bg-dark-card",children:I}),tbody:({children:I})=>i.jsx("tbody",{className:"bg-dark-elevated divide-y divide-dark-border",children:I}),tr:({children:I})=>i.jsx("tr",{className:"hover:bg-dark-card transition-colors",children:I}),th:({children:I})=>i.jsx("th",{className:"px-6 py-3 text-left text-xs font-semibold text-gray-300 uppercase tracking-wider",children:I}),td:({children:I})=>i.jsx("td",{className:"px-6 py-4 text-sm text-gray-400",children:I})},children:w})})}),i.jsx(M.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.6,delay:.4},className:"mt-10 pt-6 border-t border-dark-border",children:i.jsx("div",{className:"flex flex-wrap gap-2",children:x.map((I,C)=>i.jsxs("span",{className:"px-3 py-1 glass-card rounded-full text-sm text-gray-400 hover:border-accent-cyan/50 transition-colors",children:["#",I]},C))})}),i.jsx(M.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.6,delay:.5},className:"mt-12 glass-card rounded-xl p-6",children:i.jsxs("div",{className:"flex items-start",children:[i.jsxs("div",{className:"relative flex-shrink-0 mr-4",children:[i.jsx("img",{src:d,alt:u,className:"h-16 w-16 rounded-full object-cover"}),i.jsx("div",{className:"absolute inset-0 rounded-full ring-2 ring-accent-cyan/30"})]}),i.jsxs("div",{children:[i.jsx("h3",{className:"text-lg font-semibold mb-1 text-white",children:u}),i.jsxs("p",{className:"text-sm text-gray-400 mb-3",children:[m," at Selent"]}),i.jsx("p",{className:"text-gray-300",children:p})]})]})})]})}),i.jsx("section",{className:"py-16 relative z-10",children:i.jsx("div",{className:"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8",children:i.jsxs(M.div,{initial:{opacity:0,y:20}
9714,animate:{opacity:1,y:0},transition:{duration:.6,delay:.6},className:"relative overflow-hidden rounded-2xl",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-accent-cyan/20 to-accent-purple/20"}),i.jsxs("div",{className:"relative glass-card p-12 text-center border border-accent-cyan/30",children:[i.jsxs("div",{className:"inline-flex items-center px-4 py-2 rounded-full glass-card mb-6",children:[i.jsx("div",{className:"w-2 h-2 bg-accent-cyan rounded-full mr-2 animate-pulse"}),i.jsx("span",{className:"text-sm font-medium text-accent-cyan",children:e.blogPage.ctaReady})]}),i.jsx("h2",{className:"text-3xl font-bold mb-4 text-white",children:e.blogPage.ctaTitle}),i.jsx("p",{className:"text-xl text-gray-300 mb-8 max-w-2xl mx-auto",children:e.blogPage.ctaDescription}),i.jsx("div",{className:"flex justify-center",children:i.jsxs(Ne,{to:"/signup",className:"inline-flex items-center px-8 py-3 rounded-lg bg-accent-cyan text-dark-base font-medium hover:bg-accent-cyan-dark transition-all duration-200 group",onClick:()=>
9714Dn("blog-post-cta"),children:[i.jsx("span",{children:e.blogPage.ctaButton}),i.jsx(ut,{className:"ml-2 h-5 w-5 transform group-hover:translate-x-1 transition-transform"})]})}),i.jsx("p",{className:"mt-6 text-sm text-gray-400",children:e.blogPage.ctaSubtext})]})]})})}),s.length>0&&i.jsx("section",{className:"py-16 relative z-10",children:i.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:[i.jsx(M.h2,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},transition:{duration:.6},viewport:{once:!0},className:"text-2xl font-bold mb-8 text-white",children:e.blogPage.relatedArticles}),i.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-8",children:s.map((I,C)=>i.jsx(g2,{title:I.title,excerpt:I.excerpt,date:I.date,author:I.author,slug:I.slug,delay:C*.1},I.slug))})]})})]}),i.jsx(go,{})]})]})}function Pz(){return i.jsxs(i.Fragment,{children:[i.jsx(it,{title:"Terms of Service",description:"Terms of Service for Selent - AI-Powered Network Operations Management for Cisco Meraki. Read our terms and conditions for using our services.",keywords:"terms of service, terms and conditions, selent terms, legal",url:"https://selent.ai/terms"}),i.jsxs("div",{className:"w-full min-h-full font-sans text-white bg-dark-base custom-scrollbar noise-overlay",children:[i.jsx(fo,{}),i.jsxs("main",{className:"w-full relative",children:[i.jsx(pe,{opacity:.01}),i.jsx("div",{className:"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-16 relative z-10",children:i.jsxs(M.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.6},children:[i.jsx("h1",{className:"text-4xl font-bold mb-8 text-white",children:"Terms of Service"}),i.jsx("p",{className:"text-gray-400 mb-8",children:"Last updated: January 2025"}),i.jsxs("div",{className:"prose prose-invert max-w-none space-y-8",children:[i.jsxs("section",{children:[i.jsx("h2",{className:"text-2xl font-semibold text-white mb-4",children:"1. Acceptance of Terms"}),i.jsx("p",{className:"text-gray-300 leading-relaxed",children:"By accessing or using Selent's services, you agree to be bound by these Terms of Service. If you do not agree to these terms, please do not use our services."})]}),i.jsxs("section",{children:[i.jsx("h2",{className:"text-2xl font-semibold text-white mb-4",children:"2. Description of Service"}),i.jsx("p",{className:"text-gray-300 leading-relaxed",children:"Selent provides AI-powered network operations management services for Cisco Meraki environments. Our platform offers configuration backup, change detection, compliance monitoring, and intelligent automation capabilities."})]}),i.jsxs("section",{children:[i.jsx("h2",{className:"text-2xl font-semibold text-white mb-4",children:"3. User Responsibilities"}),i.jsx("p",{className:"text-gray-300 leading-relaxed",children:"Users are responsible for maintaining the confidentiality of their account credentials and for all activities that occur under their account. You agree to notify us immediately of any unauthorized use of your account."})]}),i.jsxs("section",{children:[i.jsx("h2",{className:"text-2xl font-semibold text-white mb-4",children:"4. Data and Privacy"}),i.jsx("p",{className:"text-gray-300 leading-relaxed",children:"Your use of Selent's services is also governed by our Privacy Policy. We are committed to protecting your data and maintaining enterprise-grade security standards."})]}),i.jsxs("section",{children:[i.jsx("h2",{className:"text-2xl font-semibold text-white mb-4",children:"5. Intellectual Property"}),i.jsx("p",{className:"text-gray-300 leading-relaxed",children:"All content, features, and functionality of Selent's services are owned by Selent and are protected by international copyright, trademark, and other intellectual property laws."})]}),i.jsxs("section",{children:[i.jsx("h2",{className:"text-2xl font-semibold text-white mb-4",children:"6. Limitation of Liability"}),i.jsx("p",{className:"text-gray-300 leading-relaxed",children:"Selent shall not be liable for any indirect, incidental, special, consequential, or punitive damages resulting from your use of or inability to use the service."})]}),i.jsxs("section",{children:[i.jsx("h2",{className:"text-2xl font-semibold text-white mb-4",children:"7.
9714Changes to Terms"}),i.jsx("p",{className:"text-gray-300 leading-relaxed",children:"We reserve the right to modify these terms at any time. We will notify users of any material changes via email or through the service interface."})]}),i.jsxs("section",{children:[i.jsx("h2",{className:"text-2xl font-semibold text-white mb-4",children:"8. Contact Information"}),i.jsx("p",{className:"text-gray-300 leading-relaxed",children:"For questions about these Terms of Service, please contact us through our website or reach out to our support team."})]})]})]})})]}),i.jsx(go,{})]})]})}function Mz(e){return e.includes("politica-de-privacidade")?"pt":e.includes("politica-de-privacidad")?"es":"en"}const Dz={en:{seo:{title:"Privacy Policy â Selent",description:"Learn how Selent collects, uses, and protects your data. Enterprise-grade privacy practices for your network configuration data.",keywords:"privacy policy, data protection, selent privacy, GDPR, data security",url:"https://selent.ai/privacy-policy"},title:"Privacy Policy",lastUpdated:"Last updated: February 2025",sections:[{heading:"1. Introduction",body:`Selent ("we," "our," or "us") operates an AI-powered network operations management platform for Cisco Meraki environments. We are committed to protecting the personal information of our customers, users, and website visitors. This Privacy Policy explains what data we collect, how we use it, how we protect it, and the rights you have over your information. 9715 9716By accessing or using our services you agree to the practices described in this policy. If you do not agree, please discontinue use of our platform.`},{heading:"2. Who We Are",body:"Selent is the data controller for personal information collected through our platform and website (selent.ai). For questions about this policy or our data practices, please contact us at [email protected]."},{heading:"3. Information We Collect",subSections:[{title:"3.1 Information you provide directly",items:["Account registration data: name, email address, company name, job title","Billing and payment information (processed securely by third-party payment processors)","Support requests and communications","Responses to surveys or forms"]},{title:"3.2 Information collected automatically",items:["Network configuration data from your Cisco Meraki environment (via API, only after explicit authorization)","Usage data: features accessed, actions performed within the platform, timestamps","Device and browser information: IP address, browser type, operating system","Cookies and similar tracking technologies (see Section 9)"]},{title:"3.3 Information from third parties",items:["Cisco Meraki API data that you authorize Selent to access","Single Sign-On (SSO) provider data if you choose to log in via a third-party identity provider"]}]},{heading:"4. How We Use Your Information",items:["Provide, operate, and maintain our platform and services","Perform automated configuration backups, change detection, and AI-driven analysis of your network data","Process transactions and manage your subscription","Send service-related notifications, security alerts, and administrative messages","Respond to support requests and inquiries","Improve, personalize, and optimize our platform","Conduct analytics and research to understand how our services are used","Comply with legal obligations and enforce our Terms of Service"]},{heading:"5. Legal Basis for Processing (GDPR)",body:"If you are located in the European Economic Area (EEA) or the United Kingdom, our legal bases for processing your personal data are:",items:["Contract performance: processing necessary to provide the services you have contracted","Legitimate interests: improving our platform, fraud prevention, and security","Legal obligation: compliance with applicable laws and regulations","Consent: where you have given explicit consent (e.g., marketing communications)"]},{heading:"6. Data Sharing and Disclosure",body:"We do not sell, rent, or trade your personal information. We may share data in the following limited circumstances:",items:["Service providers: trusted third-party vendors who assist us in operating our platform (e.g., cloud infrastru
9716cture, analytics, payment processing), subject to confidentiality agreements","Cisco Meraki: as required to deliver the integration features of our platform","Legal requirements: when required by law, court order, or governmental authority","Business transfers: in connection with a merger, acquisition, or sale of assets, in which case we will notify you","With your consent: for any other purpose disclosed to you and agreed by you"]},{heading:"7. Data Security",body:"We implement industry-standard security measures to protect your data, including:",items:["Encryption in transit (TLS/HTTPS) and at rest (AES-256)","Role-based access controls limiting who can access your data","Regular security audits and vulnerability assessments","Incident response procedures"],footer:"As an official Cisco Meraki Technology Partner, we adhere to strict security standards. However, no method of transmission or storage is 100% secure; we cannot guarantee absolute security."},{heading:"8. Data Retention",body:`We retain your personal data for as long as your account is active or as needed to provide our services. Configuration backup data is retained according to your subscription plan settings. Upon account termination, we will delete or anonymize your data within 90 days, unless a longer retention period is required by law. 9717 9718You may request deletion of your data at any time by contacting us at [email protected].`},{heading:"9. Cookies and Tracking Technologies",body:"We use cookies and similar technologies to:",items:["Keep you logged in and remember your preferences","Analyze platform usage and performance","Measure the effectiveness of our marketing campaigns"],footer:"You can control cookie preferences through your browser settings. Disabling certain cookies may affect platform functionality."},{heading:"10. International Data Transfers",body:`Selent operates globally. Your information may be transferred to and processed in countries other than your own, including countries that may not have data protection laws equivalent to those in your jurisdiction. 9719 9720Where we transfer data from the EEA, we use appropriate safeguards such as Standard Contractual Clauses (SCCs) approved by the European Commission.`},{heading:"11. Your Rights",body:"Depending on your location, you may have the following rights regarding your personal data:",items:["Access: request a copy of the personal data we hold about you","Rectification: request correction of inaccurate or incomplete data","Erasure: request deletion of your data ('right to be forgotten')","Restriction: request that we limit how we process your data","Portability: receive your data in a machine-readable format","Objection: object to processing based on legitimate interests or for direct marketing","Withdraw consent: where processing is based on consent, withdraw it at any time without affecting prior processing"],footer:"To exercise your rights, contact us at [email protected]. We will respond within 30 days. If you are in the EEA, you also have the right to lodge a complaint with your local supervisory authority."},{heading:"12. Children's Privacy",body:"Our services are not directed to individuals under the age of 16. We do not knowingly collect personal information from children. If you believe we have inadvertently collected such information, please contact us immediately."},{heading:"13. Changes to This Policy",body:'We may update this Privacy Policy from time to time. When we do, we will revise the "Last updated" date at the top of this page and, where changes are material, notify you by email or through a prominent notice on our platform. Your continued use of our services after the effective date constitutes acceptance of the updated policy.'},{heading:"14. Contact Us",body:`If you have questions, concerns, or requests related to this Privacy Policy or our data practices, please contact us: 9721
9722Email: [email protected] 9723Website: selent.ai`}]},es:{seo:{title:"PolÃtica de Privacidad â Selent",description:"Conoce cómo Selent recopila, utiliza y protege tus datos. Prácticas de privacidad de nivel empresarial para los datos de configuración de tu red.",keywords:"polÃtica de privacidad, protección de datos, selent privacidad, GDPR, seguridad de datos",url:"https://selent.ai/politica-de-privacidad"},title:"PolÃtica de Privacidad",lastUpdated:"Ãltima actualización: febrero de 2025",sections:[{heading:"1. Introducción",body:`Selent ("nosotros", "nuestro" o "nos") opera una plataforma de gestión de operaciones de red con inteligencia artificial para entornos Cisco Meraki. Estamos comprometidos con la protección de la información personal de nuestros clientes, usuarios y visitantes del sitio web. Esta PolÃtica de Privacidad explica qué datos recopilamos, cómo los usamos, cómo los protegemos y los derechos que tienes sobre tu información. 9724 9725Al acceder o utilizar nuestros servicios, aceptas las prácticas descritas en esta polÃtica. Si no estás de acuerdo, por favor deja de utilizar nuestra plataforma.`},{heading:"2. Quiénes Somos",body:"Selent es el responsable del tratamiento de la información personal recopilada a través de nuestra plataforma y sitio web (selent.ai). Para consultas sobre esta polÃtica o nuestras prácticas de datos, contáctanos en [email protected]."},{heading:"3. Información que Recopilamos",subSections:[{title:"3.1 Información que proporcionas directamente",items:["Datos de registro de cuenta: nombre, dirección de correo electrónico, nombre de empresa, cargo","Información de facturación y pago (procesada de forma segura por procesadores de pago de terceros)","Solicitudes de soporte y comunicaciones","Respuestas a encuestas o formularios"]},{title:"3.2 Información recopilada automáticamente",items:["Datos de configuración de red de tu entorno Cisco Meraki (a través de API, solo con autorización explÃcita)","Datos de uso: funciones accedidas, acciones realizadas en la plataforma, marcas de tiempo","Información de dispositivo y navegador: dirección IP, tipo de navegador, sistema operativo","Cookies y tecnologÃas de seguimiento similares (ver Sección 9)"]},{title:"3.3 Información de terceros",items:["Datos de la API de Cisco Meraki que autorizas a Selent a acceder","Datos del proveedor de inicio de sesión único (SSO) si eliges acceder a través de un proveedor de identidad externo"]}]},{heading:"4. Cómo Usamos tu Información",items:["Proporcionar, operar y mantener nuestra plataforma y servicios","Realizar copias de seguridad automáticas de configuraciones, detección de cambios y análisis impulsado por IA de los datos de tu red","Procesar transacciones y gestionar tu suscripción","Enviar notificaciones relacionadas con el servicio, alertas de seguridad y mensajes administrativos","Responder a solicitudes de soporte e inquietudes","Mejorar, personalizar y optimizar nuestra plataforma","Realizar análisis e investigaciones para comprender cómo se utilizan nuestros servicios","Cumplir con obligaciones legales y hacer cumplir nuestros Términos de Servicio"]},{heading:"5. Base Legal para el Tratamiento (RGPD)",body:"Si te encuentras en el Espacio Económico Europeo (EEE) o el Reino Unido, nuestras bases legales para el tratamiento de tus datos personales son:",items:["Ejecución del contrato: tratamiento necesario para prestar los servicios contratados","Intereses legÃtimos: mejora de nuestra plataforma, prevención de fraudes y seguridad","Obligación legal: cumplimiento de las leyes y regulaciones aplicables","Consentimiento: cuando hayas dado tu consentimiento explÃcito (p. ej., comunicaciones de marketing)"]},{heading:"6. Compartición y Divulgación de Datos",body:"No vendemos, alquilamos ni intercambiamos tu información personal. Podemos compartir datos en las siguientes circunstancias limitadas:",items:["Proveedores de servicios: proveedores externos de confianza que nos ayudan a operar nuestra plataforma (p. ej., infraestructura en la nube, análisis, procesamiento de pagos), sujetos a acuerdos de confidencialidad","Cisco Meraki: según sea necesario para ofrecer las funciones de integración de nuestra plataforma","Requerimientos legales: cuando lo exija la ley, una orden judicial o una autoridad gubernamental","Transferencias comerciales: en relación con una fusión, adquisición o venta de activos, en cuyo caso te notificaremos","Con tu consentimiento: para cualquier otro propósito que te hayamos informado y con el que hayas acordado"]},{heading:"7. Seguridad de los Datos",body:"Implementamos medidas de seguridad estándar de la industria para proteger tus datos, que incluyen:",items:["Cifrado en tránsito (TLS/HTTPS) y en reposo (AES-256)","Controles de acceso basados en roles que limitan quién puede acceder a tus datos","AuditorÃas de seguridad y evaluaciones de vulnerabilidades periódicas","Procedimientos de respuesta ante incidentes"],footer:"Como socio tecnológico oficial de Cisco Meraki, cumplimos con estrictos estándares de seguridad. Sin embargo, ningún método de transmisión o almacenamiento es 100% seguro; no podemos garantizar una seguridad absoluta."},{heading:"8. Retención de Datos",body:`Conservamos tus datos personales mientras tu cuenta esté activa o según sea necesario para prestar nuestros servicios. Los datos de copia de seguridad de configuración se conservan de acuerdo con la configuración de tu plan de suscripción. Tras la cancelación de la cuenta, eliminaremos o anonimizaremos tus datos en un plazo de 90 dÃas, a menos que la ley exija un perÃodo de retención más largo. 9726 9727Puedes solicitar la eliminación de tus datos en cualquier momento contactándonos en [email protected].`},{heading:"9. Cookies y TecnologÃas de Seguimiento",body:"Utilizamos cookies y tecnologÃas similares para:",items:["Mantener tu sesión iniciada y recordar tus preferencias","Analizar el uso y el rendimiento de la plataforma","Medir la eficacia de nuestras campañas de marketing"],footer:"Puedes controlar las preferencias de cookies a través de la configuración de tu navegador. Deshabilitar ciertas cookies puede afectar la funcionalidad de la plataforma."},{heading:"10. Transferencias Internacionales de Datos",body:`Selent opera a nivel mundial. Tu información puede ser transferida y procesada en paÃses distintos al tuyo, incluidos paÃses que pueden no tener leyes de protección de datos equivalentes a las de tu jurisdicción. 9728 9729Cuando transferimos datos desde el EEE, utilizamos salvaguardas adecuadas, como las Cláusulas Contractuales Tipo (CCT) aprobadas por la Comisión Europea.`},{heading:"11. Tus Derechos",body:"Dependiendo de tu ubicación, puedes tener los siguientes derechos sobre tus datos personales:",items:["Acceso: solicitar una copia de los datos personales que tenemos sobre ti","Rectificación: solicitar la corrección de datos inexactos o incompletos","Supresión: solicitar la eliminación de tus datos ('derecho al olvido')","Limitación: solicitar que limitemos cómo procesamos tus datos","Portabilidad: recibir tus datos en un formato legible por máquina","Oposición: oponerte al tratamiento basado en intereses legÃtimos o para marketing directo","Retirada del consentimiento: cuando el tratamiento se base en el consentimiento, retirarlo en cualquier momento sin afectar el tratamiento anterior"],footer:"Para ejercer tus derechos, contáctanos en [email protected]. Responderemos en un plazo de 30 dÃas. Si te encuentras en el EEE, también tienes derecho a presentar una reclamación ante tu autoridad supervisora local."},{heading:"12. Privacidad de los Menores",body:"Nuestros servicios no están dirigidos a personas menores de 16 años. No recopilamos conscientemente información personal de menores. Si crees que hemos recopilado inadvertidamente dicha información, contáctanos de inmediato."},{heading:"13. Cambios en Esta PolÃtica",body:'Podemos actualizar esta PolÃtica de Privacidad periódicamente. Cuando lo hagamos, revisaremos la fecha de "Ãltima actualización" en la parte superior de esta página y, cuando los cambios sean materiales, te notificaremos por correo electrónico o mediante un aviso destacado en nuestra plataforma. El uso continuado de nuestros servicios tras la fecha de entrada en vigor constituye la aceptación de la polÃtica actualizada.'},{heading:"14. Contáctanos",body:`Si tienes preguntas, inquietudes o solicitudes relacionadas con esta PolÃtica de Privacidad o nuestras prácticas de datos, contáctanos: 9730 9731Correo electrónico: [email protected] 9732Sitio web: selent.ai`}]},pt:{seo:{title:"PolÃtica de Privacidade â Selent",description:"Saiba como a Selent coleta, usa e protege seus dados. Práticas de privacidade de nÃvel empresarial para os dados de configuração da sua rede.",keywords:"polÃtica de privacidade, proteção de dados, selent privacidade, LGPD, GDPR, segurança de dados",url:"https://selent.ai/politica-de-privacidade"},title:"PolÃtica de Privacidade",lastUpdated:"Ãltima atualização: fevereiro de 2025",sections:[{heading:"1. Introdução",body:`A Selent ("nós", "nosso" ou "nos") opera uma plataforma de gerenciamento de operações de rede com inteligência artificial para ambientes Cisco Meraki. Estamos comprometidos com a proteção das informações pessoais de nossos clientes, usuários e visitantes do site. Esta PolÃtica de Privacidade explica quais dad
9732os coletamos, como os usamos, como os protegemos e os direitos que você tem sobre suas informações. 9733 9734Ao acessar ou usar nossos serviços, você concorda com as práticas descritas nesta polÃtica. Se não concordar, por favor, encerre o uso da nossa plataforma.`},{heading:"2. Quem Somos",body:"A Selent é a controladora de dados das informações pessoais coletadas por meio de nossa plataforma e site (selent.ai). Para dúvidas sobre esta polÃtica ou nossas práticas de dados, entre em contato conosco pelo e-mail [email protected]."},{heading:"3. Informações que Coletamos",subSections:[{title:"3.1 Informações que você fornece diretamente",items:["Dados de cadastro de conta: nome, endereço de e-mail, nome da empresa, cargo","Informações de faturamento e pagamento (processadas com segurança por processadores de pagamento terceiros)","Solicitações de suporte e comunicações","Respostas a pesquisas ou formulários"]},{title:"3.2 Informações coletadas automaticamente",items:["Dados de configuração de rede do seu ambiente Cisco Meraki (via API, apenas com autorização explÃcita)","Dados de uso: funcionalidades acessadas, ações realizadas na plataforma, registros de data e hora","Informações de dispositivo e navegador: endereço IP, tipo de navegador, sistema operacional","Cookies e tecnologias de rastreamento similares (ver Seção 9)"]},{title:"3.3 Informações de terceiros",items:["Dados da API Cisco Meraki que você autoriza a Selent a acessar","Dados do provedor de Login Ãnico (SSO) caso você opte por entrar por meio de um provedor de identidade externo"]}]},{heading:"4. Como Usamos Suas Informações",items:["Fornecer, operar e manter nossa plataforma e serviços","Realizar backups automáticos de configurações, detecção de alterações e análise orientada por IA dos dados da sua rede","Processar transações e gerenciar sua assinatura","Enviar notificações relacionadas ao serviço, alertas de segurança e mensagens administrativas","Responder a solicitações de suporte e dúvidas","Melhorar, personalizar e otimizar nossa plataforma","Realizar análises e pesquisas para entender como nossos serviços são utilizados","Cumprir obrigações legais e fazer cumprir nossos Termos de Serviço"]},{heading:"5. Base Legal para o Tratamento (LGPD / GDPR)",body:"Se você está localizado no Brasil, no Espaço Econômico Europeu (EEE) ou no Reino Unido, nossas bases legais para o tratamento de seus dados pessoais são:",items:["Execução de contrato: tratamento necessário para fornecer os serviços contratados","LegÃtimo interesse: melhoria da nossa plataforma, prevenção de fraudes e segurança","Obrigação legal: cumprimento de leis e regulamentos aplicáveis","Consentimento: quando você tiver dado consentimento explÃcito (ex.: comunicações de marketing)"]},{heading:"6. Compartilhamento e Divulgação de Dados",body:"Não vendemos, alugamos ou negociamos suas informações pessoais. Podemos compartilhar dados nas seguintes circunstâncias limitadas:",items:["Prestadores de serviços: fornecedores terceirizados de confiança que nos auxiliam na operação da plataforma (ex.: infraestrutura em nuvem, análises, processamento de pagamentos), sujeitos a acordos de confidencialidade","Cisco Meraki: conforme necessário para fornecer os recursos de integração da nossa plataforma","Exigências legais: quando exigido por lei, ordem judicial ou autoridade governamental","Transferências comerciais: em conexão com uma fusão, aquisição ou venda de ativos, caso em que iremos notificá-lo","Com seu consentimento: para qualquer outra finalidade informada a você e com a qual você concordou"]},{heading:"7. Segurança dos Dados",body:"Implementamos medidas de segurança padrão do setor para proteger seus dados, incluindo:",items:["Criptografia em trânsito (TLS/HTTPS) e em repouso (AES-256)","Controles de acesso baseados em funções que limitam quem pode acessar seus dados","Auditorias de segurança e avaliações de vulnerabilidades regulares","Procedimentos de resposta a incidentes"],footer:"Como parceiro tecnológico oficial da Cisco Meraki, seguimos rigorosos padrões de segurança. No entanto, nenhum método de transmissão ou armazenamento é 100% seguro; não podemos garantir segurança absoluta."},{heading:"8. Retenção de Dados",body:`Mantemos seus dados pessoais enquanto sua conta estiver ativa ou conforme necessário para fornecer nossos serviços. Os dados de backup de configuração são retidos de acordo com as configurações do seu plano de assinatura. Após o encerramento da conta, excluiremos ou anonimizaremos seus dados em até 90 dias, a menos que um prazo de retenção maior seja exigido por lei. 9735 9736Você pode solicitar a exclusão de seus dados a qualquer momento entrando em contato com [email protected].`},{heading:"9. Cookies e Tecnologias de Rastreamento",body:"Usamos cookies e tecnologias similares para:",items:["Manter sua sessão ativa e lembrar suas preferências","Analisar o uso e o desempenho da plataforma","Medir a eficácia de nossas campanhas de marketing"],footer:"Você pode controlar as preferências de cookies pelas configurações do seu navegador. Desabilitar determinados cookies pode afetar a funcionalidade da plataforma."},{heading:"10. Transferências Internacionais de Dados",body:`A Selent opera globalmente. Suas informações podem ser transferidas e processadas em paÃses diferentes do seu, incluindo paÃses que podem não ter leis de proteção de dados equivalentes à s da sua jurisdição. 9737
9738Quando transferimos dados do EEE, utilizamos salvaguardas adequadas, como as Cláusulas Contratuais Padrão (CCPs) aprovadas pela Comissão Europeia.`},{heading:"11. Seus Direitos",body:"Dependendo de sua localização, você pode ter os seguintes direitos sobre seus dados pessoais:",items:["Acesso: solicitar uma cópia dos dados pessoais que mantemos sobre você","Retificação: solicitar a correção de dados imprecisos ou incompletos","Exclusão: solicitar a exclusão de seus dados ('direito ao esquecimento')","Restrição: solicitar que limitemos como processamos seus dados","Portabilidade: receber seus dados em formato legÃvel por máquina","Oposição: opor-se ao tratamento baseado em interesses legÃtimos ou para marketing direto","Revogação do consentimento: quando o tratamento for baseado em consentimento, revogá-lo a qualquer momento sem afetar o tratamento anterior"],footer:"Para exercer seus direitos, entre em contato com [email protected]. Responderemos em até 30 dias. Se você estiver no EEE ou no Brasil, também tem o direito de apresentar uma reclamação à autoridade supervisora local (ANPD no Brasil)."},{heading:"12. Privacidade de Menores",body:"Nossos serviços não são direcionados a menores de 16 anos. Não coletamos intencionalmente informações pessoais de crianças. Se você acreditar que coletamos inadvertidamente tais informações, entre em contato conosco imediatamente."},{heading:"13. Alterações nesta PolÃtica",body:'Podemos atualizar esta PolÃtica de Privacidade periodicamente. Quando o fizermos, revisaremos a data de "Ãltima atualização" no topo desta página e, quando as alterações forem relevantes, notificaremos você por e-mail ou por meio de um aviso em destaque na nossa plataforma. O uso continuado de nossos serviços após a data de vigência constitui a aceitação da polÃtica atualizada.'},{heading:"14. Fale Conosco",body:`Se você tiver dúvidas, preocupações ou solicitações relacionadas a esta PolÃtica de Privacidade ou nossas práticas de dados, entre em contato: 9739 9740E-mail: [email protected] 9741Site: selent.ai`}]}};function Rz(e,t){return i.jsxs("section",{children:[i.jsx("h2",{className:"text-2xl font-semibold text-white mb-4",children:e.heading}),e.body&&i.jsx("p",{className:"text-gray-300 leading-relaxed mb-4 whitespace-pre-line",children:e.body}),e.subSections&&i.jsx("div",{className:"space-y-4 mb-4",children:e.subSections.map((n,a)=>i.jsxs("div",{children:[i.jsx("h3",{className:"text-lg font-medium text-gray-200 mb-2",children:n.title}),i.jsx("ul",{className:"list-disc list-inside text-gray-300 space-y-2",children:n.items.map((r,s)=>i.jsx("li",{children:r},s))})]},a))}),e.items&&i.jsx("ul",{className:"list-disc list-inside text-gray-300 space-y-2 mb-4",children:e.items.map((n,a)=>i.jsx("li",{children:n},a))}),e.footer&&i.jsx("p",{className:"text-gray-300 leading-relaxed mt-4",children:e.footer})]},t)}function Jo(){const e=ia(),t=Mz(e.pathname),n=Dz[t];return i.jsxs(i.Fragment,{children:[i.jsx(it,{title:n.seo.title,description:n.seo.description,keywords:n.seo.keywords,url:n.seo.url}),i.jsxs("div",{className:"w-full min-h-full font-sans text-white bg-dark-base custom-scrollbar noise-overlay",children:[i.jsx(fo,{}),i.jsxs("main",{className:"w-full relative",children:[i.jsx(pe,{opacity:.01}),i.jsx("div",{className:"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-16 relative z-10",children:i.jsxs(M.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.6},children:[i.jsx("h1",{className:"text-4xl font-bold mb-4 text-white",children:n.title}),i.jsx("p",{className:"text-gray-400 mb-8",children:n.lastUpdated}),i.jsx("div",{className:"prose prose-invert max-w-none space-y-8",children:n.sections.map((a,r)=>Rz(a,r))})]})})]}),i.jsx(go,{})]})]})}async function Py(e,t){return console.warn("Airtable not configured."),{success:!0,recordId:"dev-mode"}}async function My(e,t,n,a=!1){return console.warn("Airtable not configured."),{success:!0}}async function Oz(e){return console.warn("Slack webhook not configured. Set VITE_SLACK_WEBHOOK_URL environment variable."),{success:!0}}const _z=["gmail.com","yahoo.com","hotmail.com","outlook.com","live.com","aol.com","icloud.com","mail.com","protonmail.com","zoho.com","yandex.com","gmx.com","fastmail.com","tutanota.com","hey.com","pm.me","msn.com","me.com","mac.com"],dA=e=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e),Lz=e=>{if(!dA(e))return!1;const t=e.toLowerCase().split("@")[1];return!_z.includes(t)},yp={email:"",firstName:"",lastName:"",phone:"",company:"",painPoints:"",howDidYouHear:"",usesOtherTools:null,wantsDemo:null},Dy=(e,t,n)=>{localStorage.setItem("selent_signup_data",JSON.stringify(e)),localStorage.setItem("selent_signup_step",t.toString()),n&&localStorage.setItem("selent_signup_record_id",n)},zz=()=>{try{const e=localStorage.getItem("selent_signup_data"),t=localStorage.getItem("selent_signup_step"),n=localStorage.getItem("selent_signup_record_id");return{data:e?JSON.parse(e):yp,step:t?parseInt(t,10):1,recordId:n||void 0}}catch{return{data:yp,step:1}}},Ry=()=>{localStorage.removeItem("selent_signup_data"),localStorage.removeItem("selent_signup_step"),localStorage.removeItem("selent_signup_record_id")},qz=({currentStep:e,totalSteps:t})=>i.jsx("div",{className:"flex items-center justify-center gap-2 mb-8",children:Array.from({length:t},(n,a)=>a+1).map(n=>i.jsx("div",{className:`h-2 rounded-full transition-all duration-300 ${n===e?"w-8 bg-accent-cyan":n<e?"w-2 bg-accent-cyan/60":"w-2 bg-dark-border"}`},n))}),Gr=({label:e,type:t="text",value:n,onChange:a,placeholder:r,error:s,icon:o,required:l})=>i.jsxs("div",{className:"mb-4",children:[i.jsxs("label",{className:"block text-sm font-medium text-gray-300 mb-2",children:[e,l&&i.jsx("span",{className:"text-accent-red ml-1",children:"*"})]}),i.jsxs("div",{className:"relative",children:[o&&i.jsx("div",{className:"absolute left-4 top-1/2 -translate-y-1/2 text-gray-500",children:o}),i.jsx("input",{type:t,value:n,onChange:c=>a(c.target.value),placeholder:r,className:`w-full py-3 ${o?"pl-12":"pl-4"} pr-4 bg-dark-card/50 border ${s?"border-accent-red":"border-dark-border/50"} rounded-xl text-white placeholder-gray-500 focus:outline-none focus:border-accent-cyan transition-colors`})]}),s&&i.jsxs(M.p,{initial:{opacity:0,y:-10}
9741,animate:{opacity:1,y:0},className:"mt-2 text-sm text-accent-red flex items-center gap-1",children:[i.jsx(ge,{className:"h-4 w-4"}),s]})]}),Bz=({label:e,value:t,onChange:n,placeholder:a,rows:r=4,error:s,required:o})=>i.jsxs("div",{className:"mb-4",children:[i.jsxs("label",{className:"block text-sm font-medium text-gray-300 mb-2",children:[e,o&&i.jsx("span",{className:"text-accent-red ml-1",children:"*"})]}),i.jsx("textarea",{value:t,onChange:l=>n(l.target.value),placeholder:a,rows:r,className:`w-full py-3 px-4 bg-dark-card/50 border ${s?"border-accent-red":"border-dark-border/50"} rounded-xl text-white placeholder-gray-500 focus:outline-none focus:border-accent-cyan transition-colors resize-none`}),s&&i.jsxs(M.p,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},className:"mt-2 text-sm text-accent-red flex items-center gap-1",children:[i.jsx(ge,{className:"h-4 w-4"}),s]})]}),Fz=({label:e,selected:t,onClick:n,shortcut:a})=>i.jsxs(M.button,{type:"button",onClick:n,whileHover:{scale:1.02},whileTap:{scale:.98},className:`w-full py-3 px-4 rounded-xl border text-left flex items-center gap-3 transition-all duration-200 ${t?"border-accent-cyan bg-accent-cyan/10 text-white":"border-dark-border/50 bg-dark-card/30 text-gray-300 hover:border-accent-cyan/50"}`,children:[a&&i.jsx("span",{className:`w-7 h-7 flex items-center justify-center rounded-md text-xs font-medium ${t?"bg-accent-cyan text-dark-base":"bg-dark-border/50 text-gray-400"}`,children:a}),i.jsx("span",{className:"flex-1",children:e}),t&&i.jsx(ze,{className:"h-5 w-5 text-accent-cyan"})]}),Oy=({value:e,onChange:t,yesLabel:n,noLabel:a})=>i.jsxs("div",{className:"flex gap-4",children:[i.jsxs(M.button,{type:"button",onClick:()=>t(!0),whileHover:{scale:1.02},whileTap:{scale:.98},className:`flex-1 py-4 px-6 rounded-xl border flex items-center justify-center gap-3 transition-all duration-200 ${e===!0?"border-accent-cyan bg-accent-cyan/10 text-white":"border-dark-border/50 bg-dark-card/30 text-gray-300 hover:border-accent-cyan/50"}`,children:[i.jsx("span",{className:`w-7 h-7 flex items-center justify-center rounded-md text-xs font-medium ${e===!0?"bg-accent-cyan text-dark-base":"bg-dark-border/50 text-gray-400"}`,children:"Y"}),n]}),i.jsxs(M.button,{type:"button",onClick:()=>t(!1),whileHover:{scale:1.02},whileTap:{scale:.98},className:`flex-1 py-4 px-6 rounded-xl border flex items-center justify-center gap-3 transition-all duration-200 ${e===!1?"border-accent-cyan bg-accent-cyan/10 text-white":"border-dark-border/50 bg-dark-card/30 text-gray-300 hover:border-accent-cyan/50"}`,children:[i.jsx("span",{className:`w-7 h-7 flex items-center justify-center rounded-md text-xs font-medium ${e===!1?"bg-accent-cyan text-dark-base":"bg-dark-border/50 text-gray-400"}`,children:"N"}),a]})]});function Hz(){const{t:e}=su(),[t,n]=T.useState(1),[a,r]=T.useState(yp),[s,o]=T.useState({}),[l,c]=T.useState(!1),[u,d]=T.useState(!1),[m,p]=T.useState(),f=6;T.useEffect(()=>{const{data:C,step:R,recordId:O}=zz();r(C),p(O),R<=f&&n(R)},[]),T.useEffect(()=>{u||Dy(a,t,m)},[a,t,u,m]);const g=(C,R)=>{r(O=>({...O,[C]:R})),s[C]&&o(O=>({...O,[C]:void 0}))},y=()=>{const C={};switch(t){case 1:a.email?dA(a.email)?Lz(a.email)||(C.email=e.signup.errors.emailCorporate):C.email=e.signup.errors.emailInvalid:C.email=e.signup.errors.emailRequired;break;case 2:a.firstName||(C.firstName=e.signup.errors.firstNameRequired),a.lastName||(C.lastName=e.signup.errors.lastNameRequired),a.company||(C.company=e.signup.errors.companyRequired);break;case 3:(!a.painPoints||a.painPoints.trim()==="")&&(C.painPoints=e.signup.errors.painPointsRequired);break;case 4:a.howDidYouHear||(C.howDidYouHear=e.signup.errors.howDidYouHearRequired);break;case 5:a.usesOtherTools===null&&(C.usesOtherTools=e.signup.errors.usesOtherToolsRequired);break;case 6:a.wantsDemo===null&&(C.wantsDemo=e.signup.errors.wantsDemoRequired);break}return o(C),Object.keys(C).length===0},w=async()=>{if(y()){fx(t,"next");try{if(t===1&&!m){const C=await Py({email:a.email},1);C.success&&C.recordId&&(p(C.recordId),Dy(a,t+1,C.recordId))}else t===2&&m&&await My(m,{firstName:a.firstName,lastName:a.lastName,phone:a.phone,company:a.company},2)}catch(C){console.error("Airtable progressive save error:",C)}t<f?n(C=>C+1):b()}},x=()=>{fx(t,"back"),t>1&&n(C=>C-1)},b=async()=>{c(!0);try{m?await My(m,a,f,!0):await Py(a,f),await Oz(a),A5(a.wantsDemo===!0),Ry(),d(!0),a.wantsDemo&&setTimeout(()=>{window.open("https://calendly.com/fepis-selent/30min","_blank")},2e3)}catch(C){console.error("Signup error:",C),Ry(),d(!0)}finally{c(!1)}},v=C=>{C.key==="Enter"&&!C.shiftKey&&(C.preventDefault(),w())},N=[{value:"online_search",label:e.signup.howDidYouHear.options.onlineSearch,shortcut:"A"},{value:"social_media",label:e.signup.howDidYouHear.options.socialMedia,shortcut:"B"},{value:"referral",label:e.signup.howDidYouHear.options.referral,shortcut:"C"},{value:"advertisement",label:e.signup.howDidYouHear.options.advertisement,shortcut:"D"},{value:"event",label:e.signup.howDidYouHear.options.event,shortcut:"E"},{value:"other",label:e.signup.howDidYouHear.options.other,shortcut:"F"}
9741],I=()=>{const C={enter:{x:20,opacity:0},center:{x:0,opacity:1},exit:{x:-20,opacity:0}};return i.jsx(po,{mode:"wait",children:i.jsxs(M.div,{variants:C,initial:"enter",animate:"center",exit:"exit",transition:{duration:.3},onKeyDown:v,children:[t===1&&i.jsxs("div",{children:[i.jsxs("div",{className:"text-center mb-8",children:[i.jsx("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-full bg-accent-cyan/10 border border-accent-cyan/30 mb-4",children:i.jsx(gn,{className:"h-8 w-8 text-accent-cyan"})}),i.jsx("h2",{className:"text-2xl font-bold text-white mb-2",children:e.signup.steps.email.title}),i.jsx("p",{className:"text-gray-400",children:e.signup.steps.email.subtitle})]}),i.jsx(Gr,{label:e.signup.steps.email.label,type:"email",value:a.email,onChange:R=>g("email",R),placeholder:e.signup.steps.email.placeholder,error:s.email,icon:i.jsx(gn,{className:"h-5 w-5"}),required:!0}),i.jsx("p",{className:"text-xs text-gray-500 mt-2",children:e.signup.steps.email.corporateNote})]}),t===2&&i.jsxs("div",{children:[i.jsxs("div",{className:"text-center mb-8",children:[i.jsx("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-full bg-accent-cyan/10 border border-accent-cyan/30 mb-4",children:i.jsx(fT,{className:"h-8 w-8 text-accent-cyan"})}),i.jsx("h2",{className:"text-2xl font-bold text-white mb-2",children:e.signup.steps.contact.title}),i.jsx("p",{className:"text-gray-400",children:e.signup.steps.contact.subtitle})]}),i.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[i.jsx(Gr,{label:e.signup.steps.contact.firstName,value:a.firstName,onChange:R=>g("firstName",R),placeholder:"Jane",error:s.firstName,required:!0}),i.jsx(Gr,{label:e.signup.steps.contact.lastName,value:a.lastName,onChange:R=>g("lastName",R),placeholder:"Smith",error:s.lastName,required:!0})]}),i.jsx(Gr,{label:e.signup.steps.contact.phone,type:"tel",value:a.phone,onChange:R=>g("phone",R.replace(/[^0-9+\-\s()]/g,"")),placeholder:"+1 555 123 4567",icon:i.jsx(mT,{className:"h-5 w-5"})}),i.jsx(Gr,{label:e.signup.steps.contact.company,value:a.company,onChange:R=>g("company",R),placeholder:"Acme Corporation",error:s.company,icon:i.jsx(eT,{className:"h-5 w-5"}),required:!0})]}),t===3&&i.jsxs("div",{children:[i.jsxs("div",{className:"text-center mb-8",children:[i.jsx("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-full bg-accent-purple/10 border border-accent-purple/30 mb-4",children:i.jsx(Hg,{className:"h-8 w-8 text-accent-purple"})}),i.jsx("h2",{className:"text-2xl font-bold text-white mb-2",children:e.signup.steps.painPoints.title}),i.jsx("p",{className:"text-gray-400",children:e.signup.steps.painPoints.subtitle})]}),i.jsx(Bz,{label:e.signup.steps.painPoints.label,value:a.painPoints,onChange:R=>g("painPoints",R),placeholder:e.signup.steps.painPoints.placeholder,rows:4,error:s.painPoints,required:!0})]}),t===4&&i.jsxs("div",{children:[i.jsxs("div",{className:"text-center mb-8",children:[i.jsx("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-full bg-accent-cyan/10 border border-accent-cyan/30 mb-4",children:i.jsx(at,{className:"h-8 w-8 text-accent-cyan"})}),i.jsx("h2",{className:"text-2xl font-bold text-white mb-2",children:e.signup.howDidYouHear.title})]}),i.jsx("div",{className:"space-y-3",children:N.map(R=>i.jsx(Fz,{label:R.label,selected:a.howDidYouHear===R.value,onClick:()=>g("howDidYouHear",R.value),shortcut:R.shortcut},R.value))}),s.howDidYouHear&&i.jsxs(M.p,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},className:"mt-4 text-sm text-accent-red flex items-center justify-center gap-1",children:[i.jsx(ge,{className:"h-4 w-4"}),s.howDidYouHear]})]}),t===5&&i.jsxs("div",{children:[i.jsxs("div",{className:"text-center mb-8",children:[i.jsx("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-full bg-accent-purple/10 border border-accent-purple/30 mb-4",children:i.jsx(Hg,{className:"h-8 w-8 text-accent-purple"})}),i.jsx("h2",{className:"text-2xl font-bold text-white mb-2",children:e.signup.steps.otherTools.title}),i.jsx("p",{className:"text-gray-400",children:e.signup.steps.otherTools.subtitle})]}),i.jsx(Oy,{value:a.usesOtherTools,onChange:R=>g("usesOtherTools",R),yesLabel:e.signup.common.yes,noLabel:e.signup.common.no}),s.usesOtherTools&&i.jsxs(M.p,{initial:{opacity:0,y:-10}
9741,animate:{opacity:1,y:0},className:"mt-4 text-sm text-accent-red flex items-center justify-center gap-1",children:[i.jsx(ge,{className:"h-4 w-4"}),s.usesOtherTools]})]}),t===6&&i.jsxs("div",{children:[i.jsxs("div",{className:"text-center mb-8",children:[i.jsx("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-full bg-accent-cyan/10 border border-accent-cyan/30 mb-4",children:i.jsx(qt,{className:"h-8 w-8 text-accent-cyan"})}),i.jsx("h2",{className:"text-2xl font-bold text-white mb-2",children:e.signup.steps.demo.title}),i.jsx("p",{className:"text-gray-400",children:e.signup.steps.demo.subtitle})]}),i.jsx(Oy,{value:a.wantsDemo,onChange:R=>g("wantsDemo",R),yesLabel:e.signup.common.yes,noLabel:e.signup.common.no}),s.wantsDemo&&i.jsxs(M.p,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},className:"mt-4 text-sm text-accent-red flex items-center justify-center gap-1",children:[i.jsx(ge,{className:"h-4 w-4"}),s.wantsDemo]})]})]},t)})};return u?i.jsxs(i.Fragment,{children:[i.jsx(it,{title:`${e.signup.success.title} - Selent`,description:"Welcome to Selent",url:"https://selent.ai/signup"}),i.jsxs("div",{className:"w-full min-h-screen font-sans text-white bg-dark-base",children:[i.jsx(pe,{opacity:.02}),i.jsx("div",{className:"min-h-screen flex items-center justify-center px-4",children:i.jsx(M.div,{initial:{scale:.9,opacity:0},animate:{scale:1,opacity:1},transition:{duration:.5},className:"w-full max-w-md text-center",children:i.jsxs("div",{className:"glass-card p-8 rounded-2xl",children:[i.jsx(M.div,{initial:{scale:0},animate:{scale:1},transition:{delay:.2,type:"spring",stiffness:200},className:"inline-flex items-center justify-center w-20 h-20 rounded-full bg-accent-cyan/20 border border-accent-cyan/30 mb-6",children:i.jsx(ze,{className:"h-10 w-10 text-accent-cyan"})}),i.jsx("h1",{className:"text-3xl font-bold text-white mb-4",children:e.signup.success.title}),i.jsx("p",{className:"text-gray-400 mb-8",children:e.signup.success.description}),a.wantsDemo&&i.jsx("p",{className:"text-accent-cyan text-sm mb-4",children:e.signup.success.demoRedirect}),i.jsxs(Ne,{to:"/",className:"inline-flex items-center text-accent-cyan hover:text-accent-cyan-dark transition-colors",children:[i.jsx(ms,{className:"h-4 w-4 mr-2"}),e.signup.success.backToHome]})]})})})]})]}):i.jsxs(i.Fragment,{children:[i.jsx(it,{title:`${e.signup.pageTitle} - Selent`,description:"Start your free trial of Selent - AI-Powered Network Operations Management for Cisco Meraki",url:"https://selent.ai/signup"}),i.jsxs("div",{className:"w-full min-h-screen font-sans text-white bg-dark-base",children:[i.jsx(pe,{opacity:.02}),i.jsx("header",{className:"w-full py-6 px-4",children:i.jsxs("div",{className:"max-w-7xl mx-auto flex justify-between items-center",children:[i.jsx(Ne,{to:"/",className:"flex items-center",children:i.jsx("img",{alt:"Selent logo",src:"/logo_white.png",className:"h-10 w-auto object-contain"})}),i.jsxs(Ne,{to:"/",className:"text-sm text-gray-400 hover:text-white transition-colors flex items-center gap-2",children:[i.jsx(ms,{className:"h-4 w-4"}),e.signup.backToSite]})]})}),i.jsx("main",{className:"flex-1 flex items-center justify-center px-4 py-12",children:i.jsxs("div",{className:"w-full max-w-lg",children:[i.jsx(qz,{currentStep:t,totalSteps:f}),i.jsxs(M.div,{initial:{y:20,opacity:0},animate:{y:0,opacity:1},className:"glass-card p-8 rounded-2xl",children:[I(),i.jsxs("div",{className:"flex gap-4 mt-8",children:[t>1&&i.jsx(M.button,{type:"button",onClick:x,whileHover:{scale:1.02},whileTap:{scale:.98},className:"flex-1 py-3 px-6 rounded-xl border border-dark-border/50 text-gray-300 hover:border-accent-cyan/50 hover:text-white transition-all",children:i.jsxs("span",{className:"flex items-center justify-center gap-2",children:[i.jsx(ms,{className:"h-5 w-5"}),e.signup.common.back]})}),i.jsx(M.button,{type:"button",onClick:w,disabled:l,whileHover:{scale:1.02},whileTap:{scale:.98},className:`flex-1 py-3 px-6 rounded-xl bg-accent-cyan text-dark-base font-medium hover:bg-accent-cyan-dark transition-all disabled:opacity-50 disabled:cursor-not-allowed ${t===1?"w-full":""}`,children:i.jsx("span",{className:"flex items-center justify-center gap-2",children:l?i.jsxs(i.Fragment,{children:[i.jsx(M.div,{animate:{rotate:360},transition:{duration:1,repeat:1/0,ease:"linear"},className:"w-5 h-5 border-2 border-dark-base/30 border-t-dark-base rounded-full"}),e.signup.common.submitting]}):t===f?i.jsxs(i.Fragment,{children:[e.signup.common.submit,i.jsx(ze,{className:"h-5 w-5"})]}):i.jsxs(i.Fragment,{children:[e.signup.common.continue,i.jsx(ut,{className:"h-5 w-5"})]})})})]})]}),i.jsxs("div",{className:"mt-8 text-center",children:[i.jsx("p",{className:"text-xs text-gray-500",children:e.signup.trustIndicators.secure}),i.jsxs("div",{className:"flex justify-center gap-6 mt-4",children:[i.jsx("a",{href:"https://marketplace.cisco.com/en-US/apps/502978/selentai",target:"_blank",rel:"noopener noreferrer",children:i.jsx("img",{alt:"Cisco Meraki Partner",src:"/cisco-meraki-partner.webp",className:"h-8 w-auto opacity-50"})}),i.jsx("a",{href:"https://marketplace.cisco.com/en-US/apps/502978/selentai",target:"_blank",rel:"noopener noreferrer",children:i.jsx("img",{alt:"Cisco Select Developer",src:"/cisco-meraki-select-developer.webp",className:"h-8 w-auto opacity-50"})})]})]})]})})]})]})}const _y=["Argentina","Bolivia","Brasil","Chile","Colombia","Costa Rica","Cuba","Ecuador","El Salvador","España","Estados Unidos","Guatemala","Honduras","México","Nicaragua","Panamá","Paraguay","Perú","Puerto Rico","República Dominicana","Uruguay","Venezuela","Alemania","Australia","Canadá","Francia","Italia","Japón","Portugal","Reino Unido","Otros"],Uz=["gmail.com","yahoo.com","hotmail.com","outlook.com","live.com","aol.com","icloud.com","mail.com","protonmail.com","zoho.com","yandex.com","gmx.com","fastmail.com","tutanota.com","hey.com","pm.me","msn.com","me.com","mac.com"],mA=e=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e),Vz=e=>mA(e)?!Uz.includes(e.toLowerCase().split("@")[1]):!1;function Wz(){const e=new URLSearchParams(window.location.search);return{utmSource:e.get("utm_source")||void 0,utmMedium:e.get("utm_medium")||void 0,utmCampaign:e.get("utm_campaign")||void 0,utmTerm:e.get("utm_term")||void 0,utmContent:e.get("utm_content")||void 0,gclid:e.get("gclid")||void 0}}
9741const $z=({value:e,onChange:t,error:n})=>{const[a,r]=T.useState(!1),[s,o]=T.useState(""),l=T.useRef(null),c=T.useMemo(()=>{if(!s)return _y;const u=s.toLowerCase();return _y.filter(d=>d.toLowerCase().includes(u))},[s]);return T.useEffect(()=>{const u=d=>{l.current&&!l.current.contains(d.target)&&r(!1)};return document.addEventListener("mousedown",u),()=>document.removeEventListener("mousedown",u)},[]),i.jsxs("div",{ref:l,className:"relative",children:[i.jsxs("label",{className:"block text-sm font-medium text-gray-300 mb-1.5",children:["PaÃs ",i.jsx("span",{className:"text-accent-red",children:"*"})]}),i.jsxs("button",{type:"button",onClick:()=>r(!a),className:`w-full px-4 py-3 bg-dark-base border rounded-lg text-left flex items-center justify-between transition-colors ${n?"border-accent-red":"border-dark-border focus:border-accent-cyan"}`,children:[i.jsx("span",{className:e?"text-white":"text-gray-500",children:e||"Seleccionar paÃs"}),i.jsx(Hc,{className:`h-4 w-4 text-gray-400 transition-transform ${a?"rotate-180":""}`})]}),a&&i.jsxs("div",{className:"absolute z-50 mt-1 w-full bg-dark-elevated border border-dark-border rounded-lg shadow-xl max-h-60 overflow-hidden",children:[i.jsx("div",{className:"p-2 border-b border-dark-border",children:i.jsxs("div",{className:"relative",children:[i.jsx(at,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-500"}),i.jsx("input",{type:"text",value:s,onChange:u=>o(u.target.value),placeholder:"Buscar paÃs...",className:"w-full pl-9 pr-3 py-2 bg-dark-base border border-dark-border rounded-md text-sm text-white placeholder-gray-500 focus:outline-none focus:border-accent-cyan",autoFocus:!0})]})}),i.jsx("div",{className:"overflow-y-auto max-h-44",children:c.length===0?i.jsx("div",{className:"px-4 py-3 text-sm text-gray-500",children:"No se encontraron resultados"}):c.map(u=>i.jsx("button",{type:"button",onClick:()=>{t(u),r(!1),o("")},className:`w-full text-left px-4 py-2.5 text-sm transition-colors hover:bg-dark-card ${u===e?"text-accent-cyan bg-dark-card":"text-gray-300"}`,children:u},u))})]}),n&&i.jsxs("p",{className:"mt-1 text-sm text-accent-red flex items-center gap-1",children:[i.jsx(ge,{className:"h-3.5 w-3.5"})," ",n]})]})},el=({icon:e,title:t,badge:n,items:a})=>i.jsxs("div",{className:"bg-dark-card/50 border border-dark-border rounded-xl p-5 h-full",children:[i.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[i.jsx("div",{className:"w-9 h-9 rounded-lg bg-accent-cyan/10 flex items-center justify-center flex-shrink-0",children:i.jsx(e,{className:"h-[18px] w-[18px] text-accent-cyan"})}),i.jsx("h3",{className:"font-semibold text-white text-sm leading-snug",children:t}),n&&i.jsx("span",{className:"ml-auto text-[10px] font-medium uppercase tracking-wider px-2 py-0.5 rounded-full bg-accent-cyan/10 text-accent-cyan border border-accent-cyan/20 whitespace-nowrap",children:n})]}),i.jsx("ul",{className:"space-y-2.5",children:a.map((r,s)=>i.jsxs("li",{className:"flex items-start gap-2.5 text-sm text-gray-400",children:[i.jsx(r.icon,{className:"h-3.5 w-3.5 text-accent-cyan/60 mt-0.5 flex-shrink-0"}),i.jsx("span",{children:r.text})]},s))})]}),Ly=({icon:e,title:t,subtitle:n,description:a})=>i.jsxs("div",{className:"flex items-start gap-4 bg-dark-card/60 border border-dark-border rounded-xl p-5",children:[i.jsx("div",{className:"flex-shrink-0",children:i.jsx("div",{className:"w-12 h-12 rounded-full bg-gradient-to-br from-accent-cyan/20 to-accent-purple/20 border border-accent-cyan/30 flex items-center justify-center",children:i.jsx(e,{className:"h-5 w-5 text-accent-cyan"})})}),i.jsxs("div",{children:[i.jsx("p",{className:"text-xs font-medium uppercase tracking-wider text-accent-cyan mb-1",children:n}),i.jsx("h4",{className:"font-semibold text-white text-sm mb-1",children:t}),i.jsx("p",{className:"text-sm text-gray-500 leading-relaxed",children:a})]})]}),Yz=()=>{const[e,t]=T.useState({name:"",company:"",email:"",country:""}),[n,a]=T.useState({}),[r,s]=T.useState(!1),[o,l]=T.useState(!1),c=()=>{const p={};return e.name.trim()||(p.name="El nombre es obligatorio"),e.company.trim()||(p.company="La empresa es obligatoria"),e.email.trim()?mA(e.email)?Vz(e.email)||(p.email="Usa tu correo corporativo (no se aceptan Gmail, Hotmail, etc.)"):p.email="Ingresa un correo válido":p.email="El correo es obligatorio",e.country||(p.country="Selecciona un paÃs"),a(p),Object.keys(p).length===0},u=async p=>{if(p.preventDefault(),!!c()){s(!0);try{await fetch("/api/lead",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,source:"Google Ads",landingUrl:window.location.href,...Wz()})})}catch(f){console.error("Lead submission error:",f)}Dn("landing-meraki"),s(!1),l(!0),setTimeout(()=>{window.location.href="/landing-meraki-gracias"},3e3)}},d=(p,f)=>{t(g=>({...g,[p]:f})),n[p]&&a(g=>{const y={...g};return delete y[p],y})},m=i.jsx("div",{className:"bg-dark-elevated border border-dark-border rounded-2xl p-6 sm:p-8 shadow-xl",children:o?i.jsxs(M.div,{initial:{opacity:0,scale:.95}
9741,animate:{opacity:1,scale:1},transition:{duration:.4},className:"text-center py-8",children:[i.jsx("div",{className:"w-16 h-16 rounded-full bg-accent-cyan/10 flex items-center justify-center mx-auto mb-4",children:i.jsx(ze,{className:"h-8 w-8 text-accent-cyan"})}),i.jsx("h3",{className:"text-xl font-semibold mb-2",children:"¡Gracias!"}),i.jsx("p",{className:"text-gray-400",children:"Te estamos redirigiendo para agendar tu demo."}),i.jsx("div",{className:"mt-4 flex justify-center",children:i.jsx("div",{className:"w-6 h-6 border-2 border-accent-cyan border-t-transparent rounded-full animate-spin"})})]}):i.jsxs(i.Fragment,{children:[i.jsx("h2",{className:"text-xl font-semibold mb-2",children:"Agenda una demo de 30 minutos"}),i.jsx("p",{className:"text-sm text-gray-400 mb-6",children:"Descubre cómo Selent te permite operar Cisco Meraki con mayor control, visibilidad y seguridad."}),i.jsxs("form",{onSubmit:u,className:"space-y-4",children:[i.jsxs("div",{children:[i.jsxs("label",{className:"block text-sm font-medium text-gray-300 mb-1.5",children:["Nombre completo ",i.jsx("span",{className:"text-accent-red",children:"*"})]}),i.jsx("input",{type:"text",value:e.name,onChange:p=>d("name",p.target.value),placeholder:"Tu nombre completo",className:`w-full px-4 py-3 bg-dark-base border rounded-lg text-white placeholder-gray-500 focus:outline-none transition-colors ${n.name?"border-accent-red":"border-dark-border focus:border-accent-cyan"}`}),n.name&&i.jsxs("p",{className:"mt-1 text-sm text-accent-red flex items-center gap-1",children:[i.jsx(ge,{className:"h-3.5 w-3.5"}),n.name]})]}),i.jsxs("div",{children:[i.jsxs("label",{className:"block text-sm font-medium text-gray-300 mb-1.5",children:["Empresa ",i.jsx("span",{className:"text-accent-red",children:"*"})]}),i.jsx("input",{type:"text",value:e.company,onChange:p=>d("company",p.target.value),placeholder:"Nombre de tu empresa",className:`w-full px-4 py-3 bg-dark-base border rounded-lg text-white placeholder-gray-500 focus:outline-none transition-colors ${n.company?"border-accent-red":"border-dark-border focus:border-accent-cyan"}`}),n.company&&i.jsxs("p",{className:"mt-1 text-sm text-accent-red flex items-center gap-1",children:[i.jsx(ge,{className:"h-3.5 w-3.5"}),n.company]})]}),i.jsxs("div",{children:[i.jsxs("label",{className:"block text-sm font-medium text-gray-300 mb-1.5",children:["Correo corporativo ",i.jsx("span",{className:"text-accent-red",children:"*"})]}),i.jsx("input",{type:"email",value:e.email,onChange:p=>d("email",p.target.value),placeholder:"[email protected]",className:`w-full px-4 py-3 bg-dark-base border rounded-lg text-white placeholder-gray-500 focus:outline-none transition-colors ${n.email?"border-accent-red":"border-dark-border focus:border-accent-cyan"}`}),n.email&&i.jsxs("p",{className:"mt-1 text-sm text-accent-red flex items-center gap-1",children:[i.jsx(ge,{className:"h-3.5 w-3.5"}),n.email]})]}),i.jsx($z,{value:e.country,onChange:p=>d("country",p),error:n.country}),i.jsx("button",{type:"submit",disabled:r,className:"w-full py-3.5 bg-accent-cyan text-dark-base font-semibold rounded-lg hover:bg-accent-cyan-dark transition-colors disabled:opacity-60 disabled:cursor-not-allowed mt-2",children:r?"Enviando...":"Agendar demo"}),i.jsx("p",{className:"text-xs text-gray-500 text-center mt-3",children:"Al enviar el formulario, serás redirigido para agendar una reunión. No compartimos tu información con terceros."})]})]})});return i.jsxs(i.Fragment,{children:[i.jsx(it,{title:"Backup y restore confiable para Cisco Meraki | Selent",description:"Un cambio mal ejecutado en Cisco Meraki puede dejar tu red inoperativa. Selent te permite respaldar, auditar y restaurar configuraciones de forma segura y escalable.",keywords:"cisco meraki, backup, restore, configuración, red, firewall, VLAN, SSID, network management, Selent",url:"https://selent.ai/landing-meraki"}),i.jsxs("div",{className:"min-h-screen bg-dark-base text-white",children:[i.jsx("header",{className:"w-full sticky top-0 z-50 glass-card backdrop-blur-xl border-b border-dark-border/50",children:i.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:i.jsx("div",{className:"flex items-center py-5",children:i.jsx("img",{alt:"Selent logo",src:"/logo_white.png",className:"h-10 w-auto object-contain"})})})}),i.jsxs("section",{className:"relative overflow-hidden",children:[i.jsx(pe,{opacity:.02}),i.jsxs("div",{className:"absolute inset-0 pointer-events-none",children:[i.jsx("div",{className:"absolute top-0 left-1/4 w-96 h-96 bg-accent-cyan/5 rounded-full blur-3xl"}),i.jsx("div",{className:"absolute bottom-0 right-1/4 w-96 h-96 bg-accent-purple/5 rounded-full blur-3xl"})]}),i.jsx("div",{className:"relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12 lg:py-20",children:i.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-12 lg:gap-12 items-start",children:[i.jsxs(M.div,{className:"lg:col-span-7",initial:{opacity:0,x:-30}
9741,animate:{opacity:1,x:0},transition:{duration:.7,ease:[.23,1,.32,1]},children:[i.jsxs("h1",{className:"text-3xl sm:text-4xl lg:text-[2.75rem] xl:text-5xl font-bold leading-tight mb-6",children:["Backup y restore confiable para"," ",i.jsx("span",{className:"text-accent-cyan",children:"Cisco Meraki"})]}),i.jsx("p",{className:"text-lg text-gray-400 mb-5 leading-relaxed",children:"Un cambio mal ejecutado en Cisco Meraki puede dejar tu red inoperativa. Selent te permite respaldar, auditar y restaurar configuraciones de forma segura y escalable."}),i.jsx("p",{className:"text-gray-400 mb-8 leading-relaxed",children:"Revertir cambios erróneos en Cisco Meraki puede ser lento y riesgoso si no cuentas con herramientas adicionales. Un error en firewall, VLANs o SSIDs puede comprometer la continuidad del negocio. Selent incorpora herramientas diseñadas especÃficamente para operar Cisco Meraki de forma segura y profesional."}),i.jsx("p",{className:"text-sm text-gray-500 border-l-2 border-accent-cyan/30 pl-4 mb-8",children:"Construido por un equipo con experiencia en Cisco. Solución validada para entornos empresariales."}),i.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[i.jsx("a",{href:"https://marketplace.cisco.com/en-US/apps/502978/selentai",target:"_blank",rel:"noopener noreferrer",className:"block",children:i.jsx(Ly,{icon:qc,subtitle:"Partner Tecnológico",title:"Partner Tecnológico Cisco Meraki",description:"Partner tecnológico oficial con integración API profunda y compatibilidad certificada."})}),i.jsx("a",{href:"https://marketplace.cisco.com/en-US/apps/502978/selentai",target:"_blank",rel:"noopener noreferrer",className:"block",children:i.jsx(Ly,{icon:Bc,subtitle:"Cisco Partner",title:"Select Developer",description:"Estatus de desarrollador élite con acceso avanzado a plataforma y soporte prioritario."})})]})]}),i.jsx(M.div,{className:"lg:col-span-5 lg:sticky lg:top-28",initial:{opacity:0,x:30},animate:{opacity:1,x:0},transition:{duration:.7,delay:.2,ease:[.23,1,.32,1]},children:m})]})})]}),i.jsxs("section",{className:"relative border-t border-dark-border/50",children:[i.jsx(pe,{opacity:.015}),i.jsxs("div",{className:"relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-16 lg:py-20",children:[i.jsxs(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0,margin:"-80px"},transition:{duration:.6},className:"text-center mb-12",children:[i.jsxs("h2",{className:"text-2xl sm:text-3xl font-bold mb-3",children:["Todo lo que necesitas para operar ",i.jsx("span",{className:"text-accent-cyan",children:"Cisco Meraki"})," con confianza"]}),i.jsx("p",{className:"text-gray-400 max-w-2xl mx-auto",children:"Respaldo, visibilidad, inteligencia y cumplimiento en una sola plataforma."})]}),i.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-5",children:[i.jsx(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5,delay:0},children:i.jsx(el,{icon:ta,title:"Respaldo de Configuración Cisco Meraki",badge:"Popular",items:[{icon:qe,text:"Respaldo automatizado: Firewalls MX, Switches MS, Access Points MR, Cámaras MV"},{icon:Fc,text:"Snapshots completos de configuración de red"},{icon:jn,text:"Respaldo de plantillas y polÃticas"},{icon:Xc,text:"Sincronización de configuraciones entre organizaciones"},{icon:Yc,text:"Integración completa con Meraki Dashboard API"}
9741]})}),i.jsx(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5,delay:.1},children:i.jsx(el,{icon:br,title:"Detección Inteligente de Cambios",items:[{icon:$c,text:"Análisis automático de cambios en la configuración"},{icon:Zn,text:"Explicación del impacto en lenguaje simple"},{icon:na,text:"Seguimiento de cambios en VLANs y subredes"},{icon:Pa,text:"Seguimiento de reglas de firewall"},{icon:Kc,text:"Seguimiento de configuración de SSIDs inalámbricos"},{icon:Vc,text:"Seguimiento de puertos de switch"}]})}),i.jsx(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5,delay:.2},children:i.jsx(el,{icon:ea,title:"Búsqueda en Lenguaje Natural (con IA)",items:[{icon:at,text:"Buscar configuraciones usando lenguaje simple"},{icon:lo,text:"Encontrar dispositivos por IP o MAC"},{icon:Pa,text:"Buscar reglas de firewall por puerto"},{icon:oo,text:"Localizar VLANs y subredes"},{icon:Zc,text:"Consultar configuraciones inalámbricas"}]})}),i.jsx(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5,delay:.3},children:i.jsx(el,{icon:Uc,title:"Monitoreo de Cumplimiento",badge:"Próximamente",items:[{icon:so,text:"Verificaciones de cumplimiento PCI DSS"},{icon:oe,text:"AuditorÃa de autenticación 802.1X"},{icon:Wc,text:"Validación de reglas de firewall"},{icon:qe,text:"Verificación de aislamiento de red de invitados"}]})})]})]})]}),i.jsx("section",{className:"relative border-t border-dark-border/50",children:i.jsx("div",{className:"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-16 lg:py-20",children:i.jsxs(M.blockquote,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0,margin:"-50px"},transition:{duration:.6},className:"relative",children:[i.jsx("div",{className:"absolute -top-4 -left-2 text-accent-cyan/20",children:i.jsx(Qc,{className:"h-12 w-12"})}),i.jsx("p",{className:"text-lg sm:text-xl text-gray-300 leading-relaxed italic pl-8",children:"âAntes de Selent, volver atrás un cambio en Meraki era manual y estresante. Ahora tenemos snapshots claros y la tranquilidad de poder restaurar en minutos.â"}),i.jsxs("footer",{className:"mt-6 pl-8",children:[i.jsx("p",{className:"text-sm font-medium text-white",children:"Carlos M."}),i.jsx("p",{className:"text-sm text-gray-500",children:"Network Administrator, empresa enterprise en Latinoamérica"})]})]})})}),i.jsxs("section",{className:"relative border-t border-dark-border/50 bg-dark-elevated/50",children:[i.jsx(pe,{opacity:.015}),i.jsx("div",{className:"relative z-10 max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-16 lg:py-20",children:i.jsxs(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0,margin:"-50px"},transition:{duration:.6},children:[i.jsx("h2",{className:"text-2xl font-bold mb-6",children:"Acerca de Selent"}),i.jsxs("div",{className:"space-y-4 text-gray-400 leading-relaxed",children:[i.jsx("p",{children:"Selent es una plataforma diseñada para operar redes Cisco Meraki de forma segura, escalable y profesional."}),i.jsx("p",{children:"El equipo está compuesto por profesionales con experiencia previa en Cisco y en la operación de redes empresariales complejas. Selent ha sido validado en entornos productivos donde la continuidad operativa y el control del cambio son crÃticos."})]})]})})]}),i.jsx("footer",{className:"border-t border-dark-border py-8",children:i.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:i.jsxs("div",{className:"flex flex-col sm:flex-row justify-between items-center gap-4",children:[i.jsx("img",{alt:"Selent logo",src:"/logo_white.png",className:"h-8 w-auto object-contain"}),i.jsxs("p",{className:"text-sm text-gray-500",children:["© ",new Date().getFullYear()," Selent. Todos los derechos reservados."]})]})})})]})]})},tl=({icon:e,title:t,badge:n,items:a})=>i.jsxs("div",{className:"bg-dark-card/50 border border-dark-border rounded-xl p-5 h-full",children:[i.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[i.jsx("div",{className:"w-9 h-9 rounded-lg bg-accent-cyan/10 flex items-center justify-center flex-shrink-0",children:i.jsx(e,{className:"h-[18px] w-[18px] text-accent-cyan"})}),i.jsx("h3",{className:"font-semibold text-white text-sm leading-snug",children:t}),n&&i.jsx("span",{className:"ml-auto text-[10px] font-medium uppercase tracking-wider px-2 py-0.5 rounded-full bg-accent-cyan/10 text-accent-cyan border border-accent-cyan/20 whitespace-nowrap",children:n})]}),i.jsx("ul",{className:"space-y-2.5",children:a.map((r,s)=>i.jsxs("li",{className:"flex items-start gap-2.5 text-sm text-gray-400",children:[i.jsx(r.icon,{className:"h-3.5 w-3.5 text-accent-cyan/60 mt-0.5 flex-shrink-0"}),i.jsx("span",{children:r.text})]},s))})]}),zy=({icon:e,title:t,subtitle:n,description:a})=>i.jsxs("div",{className:"flex items-start gap-4 bg-dark-card/60 border border-dark-border rounded-xl p-5",children:[i.jsx("div",{className:"flex-shrink-0",children:i.jsx("div",{className:"w-12 h-12 rounded-full bg-gradient-to-br from-accent-cyan/20 to-accent-purple/20 border border-accent-cyan/30 flex items-center justify-center",children:i.jsx(e,{className:"h-5 w-5 text-accent-cyan"})})}),i.jsxs("div",{children:[i.jsx("p",{className:"text-xs font-medium uppercase tracking-wider text-accent-cyan mb-1",children:n}),i.jsx("h4",{className:"font-semibold text-white text-sm mb-1",children:t}),i.jsx("p",{className:"text-sm text-gray-500 leading-relaxed",children:a})]})]}),Gz=()=>{const e=i.jsx("div",{className:"bg-dark-elevated border border-dark-border rounded-2xl p-6 sm:p-8 shadow-xl",children:i.jsxs(M.div,{initial:{opacity:0,scale:.95}
vendor: 4,417 bytes, line 9741
9741,animate:{opacity:1,scale:1},transition:{duration:.5},className:"text-center py-6",children:[i.jsx("div",{className:"w-16 h-16 rounded-full bg-accent-cyan/10 flex items-center justify-center mx-auto mb-5",children:i.jsx(ze,{className:"h-8 w-8 text-accent-cyan"})}),i.jsx("h2",{className:"text-2xl font-semibold mb-3",children:"¡Gracias por tu interés!"}),i.jsx("p",{className:"text-gray-400 mb-6 leading-relaxed",children:"Recibimos tu solicitud. Nuestro equipo se pondrá en contacto contigo en breve para coordinar una demo personalizada."}),i.jsxs("div",{className:"space-y-3 text-left max-w-xs mx-auto",children:[i.jsxs("div",{className:"flex items-center gap-3 text-sm text-gray-400",children:[i.jsx(gn,{className:"h-4 w-4 text-accent-cyan flex-shrink-0"}),i.jsx("span",{children:"Revisa tu bandeja de entrada"})]}),i.jsxs("div",{className:"flex items-center gap-3 text-sm text-gray-400",children:[i.jsx(qt,{className:"h-4 w-4 text-accent-cyan flex-shrink-0"}),i.jsx("span",{children:"Te contactaremos en menos de 24 hs"})]})]})]})});return i.jsxs(i.Fragment,{children:[i.jsx(it,{title:"Gracias por tu solicitud | Selent",description:"Recibimos tu solicitud de demo. Nuestro equipo se pondrá en contacto contigo en breve.",keywords:"cisco meraki, backup, restore, configuración, red, firewall, VLAN, SSID, network management, Selent",url:"https://selent.ai/landing-meraki-gracias",noindex:!0}),i.jsxs("div",{className:"min-h-screen bg-dark-base text-white",children:[i.jsx("header",{className:"w-full sticky top-0 z-50 glass-card backdrop-blur-xl border-b border-dark-border/50",children:i.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:i.jsx("div",{className:"flex items-center py-5",children:i.jsx("img",{alt:"Selent logo",src:"/logo_white.png",className:"h-10 w-auto object-contain"})})})}),i.jsxs("section",{className:"relative overflow-hidden",children:[i.jsx(pe,{opacity:.02}),i.jsxs("div",{className:"absolute inset-0 pointer-events-none",children:[i.jsx("div",{className:"absolute top-0 left-1/4 w-96 h-96 bg-accent-cyan/5 rounded-full blur-3xl"}),i.jsx("div",{className:"absolute bottom-0 right-1/4 w-96 h-96 bg-accent-purple/5 rounded-full blur-3xl"})]}),i.jsx("div",{className:"relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12 lg:py-20",children:i.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-12 lg:gap-12 items-start",children:[i.jsxs(M.div,{className:"lg:col-span-7",initial:{opacity:0,x:-30},animate:{opacity:1,x:0},transition:{duration:.7,ease:[.23,1,.32,1]},children:[i.jsxs("h1",{className:"text-3xl sm:text-4xl lg:text-[2.75rem] xl:text-5xl font-bold leading-tight mb-6",children:["Backup y restore confiable para"," ",i.jsx("span",{className:"text-accent-cyan",children:"Cisco Meraki"})]}),i.jsx("p",{className:"text-lg text-gray-400 mb-5 leading-relaxed",children:"Un cambio mal ejecutado en Cisco Meraki puede dejar tu red inoperativa. Selent te permite respaldar, auditar y restaurar configuraciones de forma segura y escalable."}),i.jsx("p",{className:"text-gray-400 mb-8 leading-relaxed",children:"Revertir cambios erróneos en Cisco Meraki puede ser lento y riesgoso si no cuentas con herramientas adicionales. Un error en firewall, VLANs o SSIDs puede comprometer la continuidad del negocio. Selent incorpora herramientas diseñadas especÃficamente para operar Cisco Meraki de forma segura y profesional."}),i.jsx("p",{className:"text-sm text-gray-500 border-l-2 border-accent-cyan/30 pl-4 mb-8",children:"Construido por un equipo con experiencia en Cisco. Solución validada para entornos empresariales."}),i.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[i.jsx("a",{href:"https://marketplace.cisco.com/en-US/apps/502978/selentai",target:"_blank",rel:"noopener noreferrer",className:"block",children:i.jsx(zy,{icon:qc,subtitle:"Partner Tecnológico",title:"Partner Tecnológico Cisco Meraki",description:"Partner tecnológico oficial con integración API profunda y compatibilidad certificada."})}),i.jsx("a",{href:"https://marketplace.cisco.com/en-US/apps/502978/selentai",target:"_blank",rel:"noopener noreferrer",className:"block",children:i.jsx(zy,{icon:Bc,subtitle:"Cisco Partner",title:"Select Developer",description:"Estatus de desarrollador élite con acceso avanzado a plataforma y soporte prioritario."})})]})]}),i.jsx(M.div,{className:"lg:col-span-5 lg:sticky lg:top-28",initial:{opacity:0,x:30}
9741,animate:{opacity:1,x:0},transition:{duration:.7,delay:.2,ease:[.23,1,.32,1]},children:e})]})})]}),i.jsxs("section",{className:"relative border-t border-dark-border/50",children:[i.jsx(pe,{opacity:.015}),i.jsxs("div",{className:"relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-16 lg:py-20",children:[i.jsxs(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0,margin:"-80px"},transition:{duration:.6},className:"text-center mb-12",children:[i.jsxs("h2",{className:"text-2xl sm:text-3xl font-bold mb-3",children:["Todo lo que necesitas para operar ",i.jsx("span",{className:"text-accent-cyan",children:"Cisco Meraki"})," con confianza"]}),i.jsx("p",{className:"text-gray-400 max-w-2xl mx-auto",children:"Respaldo, visibilidad, inteligencia y cumplimiento en una sola plataforma."})]}),i.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-5",children:[i.jsx(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5,delay:0},children:i.jsx(tl,{icon:ta,title:"Respaldo de Configuración Cisco Meraki",badge:"Popular",items:[{icon:qe,text:"Respaldo automatizado: Firewalls MX, Switches MS, Access Points MR, Cámaras MV"},{icon:Fc,text:"Snapshots completos de configuración de red"},{icon:jn,text:"Respaldo de plantillas y polÃticas"},{icon:Xc,text:"Sincronización de configuraciones entre organizaciones"},{icon:Yc,text:"Integración completa con Meraki Dashboard API"}
9741]})}),i.jsx(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5,delay:.1},children:i.jsx(tl,{icon:br,title:"Detección Inteligente de Cambios",items:[{icon:$c,text:"Análisis automático de cambios en la configuración"},{icon:Zn,text:"Explicación del impacto en lenguaje simple"},{icon:na,text:"Seguimiento de cambios en VLANs y subredes"},{icon:Pa,text:"Seguimiento de reglas de firewall"},{icon:Kc,text:"Seguimiento de configuración de SSIDs inalámbricos"},{icon:Vc,text:"Seguimiento de puertos de switch"}]})}),i.jsx(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5,delay:.2},children:i.jsx(tl,{icon:ea,title:"Búsqueda en Lenguaje Natural (con IA)",items:[{icon:at,text:"Buscar configuraciones usando lenguaje simple"},{icon:lo,text:"Encontrar dispositivos por IP o MAC"},{icon:Pa,text:"Buscar reglas de firewall por puerto"},{icon:oo,text:"Localizar VLANs y subredes"},{icon:Zc,text:"Consultar configuraciones inalámbricas"}]})}),i.jsx(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5,delay:.3},children:i.jsx(tl,{icon:Uc,title:"Monitoreo de Cumplimiento",badge:"Próximamente",items:[{icon:so,text:"Verificaciones de cumplimiento PCI DSS"},{icon:oe,text:"AuditorÃa de autenticación 802.1X"},{icon:Wc,text:"Validación de reglas de firewall"},{icon:qe,text:"Verificación de aislamiento de red de invitados"}]})})]})]})]}),i.jsx("section",{className:"relative border-t border-dark-border/50",children:i.jsx("div",{className:"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-16 lg:py-20",children:i.jsxs(M.blockquote,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0,margin:"-50px"},transition:{duration:.6},className:"relative",children:[i.jsx("div",{className:"absolute -top-4 -left-2 text-accent-cyan/20",children:i.jsx(Qc,{className:"h-12 w-12"})}),i.jsx("p",{className:"text-lg sm:text-xl text-gray-300 leading-relaxed italic pl-8",children:"âAntes de Selent, volver atrás un cambio en Meraki era manual y estresante. Ahora tenemos snapshots claros y la tranquilidad de poder restaurar en minutos.â"}),i.jsxs("footer",{className:"mt-6 pl-8",children:[i.jsx("p",{className:"text-sm font-medium text-white",children:"Carlos M."}),i.jsx("p",{className:"text-sm text-gray-500",children:"Network Administrator, empresa enterprise en Latinoamérica"})]})]})})}),i.jsxs("section",{className:"relative border-t border-dark-border/50 bg-dark-elevated/50",children:[i.jsx(pe,{opacity:.015}),i.jsx("div",{className:"relative z-10 max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-16 lg:py-20",children:i.jsxs(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0,margin:"-50px"},transition:{duration:.6},children:[i.jsx("h2",{className:"text-2xl font-bold mb-6",children:"Acerca de Selent"}),i.jsxs("div",{className:"space-y-4 text-gray-400 leading-relaxed",children:[i.jsx("p",{children:"Selent es una plataforma diseñada para operar redes Cisco Meraki de forma segura, escalable y profesional."}),i.jsx("p",{children:"El equipo está compuesto por profesionales con experiencia previa en Cisco y en la operación de redes empresariales complejas. Selent ha sido validado en entornos productivos donde la continuidad operativa y el control del cambio son crÃticos."})]})]})})]}),i.jsx("footer",{className:"border-t border-dark-border py-8",children:i.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:i.jsxs("div",{className:"flex flex-col sm:flex-row justify-between items-center gap-4",children:[i.jsx("img",{alt:"Selent logo",src:"/logo_white.png",className:"h-8 w-auto object-contain"}),i.jsxs("p",{className:"text-sm text-gray-500",children:["© ",new Date().getFullYear()," Selent. Todos los derechos reservados."]})]})})})]})]})},qy=["Argentina","Australia","Bolivia","Brazil","Canada","Chile","Colombia","Costa Rica","Cuba","Ecuador","El Salvador","France","Germany","Guatemala","Honduras","Italy","Japan","Mexico","Nicaragua","Panama","Paraguay","Peru","Portugal","Puerto Rico","Dominican Republic","Spain","United Kingdom","United States","Uruguay","Venezuela","Other"],Qz=["gmail.com","yahoo.com","hotmail.com","outlook.com","live.com","aol.com","icloud.com","mail.com","protonmail.com","zoho.com","yandex.com","gmx.com","fastmail.com","tutanota.com","hey.com","pm.me","msn.com","me.com","mac.com"],pA=e=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e),Kz=e=>pA(e)?!Qz.includes(e.toLowerCase().split("@")[1]):!1;function Xz(){const e=new URLSearchParams(window.location.search);return{utmSource:e.get("utm_source")||void 0,utmMedium:e.get("utm_medium")||void 0,utmCampaign:e.get("utm_campaign")||void 0,utmTerm:e.get("utm_term")||void 0,utmContent:e.get("utm_content")||void 0,gclid:e.get("gclid")||void 0}}
9741const Zz=({value:e,onChange:t,error:n})=>{const[a,r]=T.useState(!1),[s,o]=T.useState(""),l=T.useRef(null),c=T.useMemo(()=>{if(!s)return qy;const u=s.toLowerCase();return qy.filter(d=>d.toLowerCase().includes(u))},[s]);return T.useEffect(()=>{const u=d=>{l.current&&!l.current.contains(d.target)&&r(!1)};return document.addEventListener("mousedown",u),()=>document.removeEventListener("mousedown",u)},[]),i.jsxs("div",{ref:l,className:"relative",children:[i.jsxs("label",{className:"block text-sm font-medium text-gray-300 mb-1.5",children:["Country ",i.jsx("span",{className:"text-accent-red",children:"*"})]}),i.jsxs("button",{type:"button",onClick:()=>r(!a),className:`w-full px-4 py-3 bg-dark-base border rounded-lg text-left flex items-center justify-between transition-colors ${n?"border-accent-red":"border-dark-border focus:border-accent-cyan"}`,children:[i.jsx("span",{className:e?"text-white":"text-gray-500",children:e||"Select country"}),i.jsx(Hc,{className:`h-4 w-4 text-gray-400 transition-transform ${a?"rotate-180":""}`})]}),a&&i.jsxs("div",{className:"absolute z-50 mt-1 w-full bg-dark-elevated border border-dark-border rounded-lg shadow-xl max-h-60 overflow-hidden",children:[i.jsx("div",{className:"p-2 border-b border-dark-border",children:i.jsxs("div",{className:"relative",children:[i.jsx(at,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-500"}),i.jsx("input",{type:"text",value:s,onChange:u=>o(u.target.value),placeholder:"Search country...",className:"w-full pl-9 pr-3 py-2 bg-dark-base border border-dark-border rounded-md text-sm text-white placeholder-gray-500 focus:outline-none focus:border-accent-cyan",autoFocus:!0})]})}),i.jsx("div",{className:"overflow-y-auto max-h-44",children:c.length===0?i.jsx("div",{className:"px-4 py-3 text-sm text-gray-500",children:"No results found"}):c.map(u=>i.jsx("button",{type:"button",onClick:()=>{t(u),r(!1),o("")},className:`w-full text-left px-4 py-2.5 text-sm transition-colors hover:bg-dark-card ${u===e?"text-accent-cyan bg-dark-card":"text-gray-300"}`,children:u},u))})]}),n&&i.jsxs("p",{className:"mt-1 text-sm text-accent-red flex items-center gap-1",children:[i.jsx(ge,{className:"h-3.5 w-3.5"})," ",n]})]})},nl=({icon:e,title:t,badge:n,items:a})=>i.jsxs("div",{className:"bg-dark-card/50 border border-dark-border rounded-xl p-5 h-full",children:[i.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[i.jsx("div",{className:"w-9 h-9 rounded-lg bg-accent-cyan/10 flex items-center justify-center flex-shrink-0",children:i.jsx(e,{className:"h-[18px] w-[18px] text-accent-cyan"})}),i.jsx("h3",{className:"font-semibold text-white text-sm leading-snug",children:t}),n&&i.jsx("span",{className:"ml-auto text-[10px] font-medium uppercase tracking-wider px-2 py-0.5 rounded-full bg-accent-cyan/10 text-accent-cyan border border-accent-cyan/20 whitespace-nowrap",children:n})]}),i.jsx("ul",{className:"space-y-2.5",children:a.map((r,s)=>i.jsxs("li",{className:"flex items-start gap-2.5 text-sm text-gray-400",children:[i.jsx(r.icon,{className:"h-3.5 w-3.5 text-accent-cyan/60 mt-0.5 flex-shrink-0"}),i.jsx("span",{children:r.text})]},s))})]}),By=({icon:e,title:t,subtitle:n,description:a})=>i.jsxs("div",{className:"flex items-start gap-4 bg-dark-card/60 border border-dark-border rounded-xl p-5",children:[i.jsx("div",{className:"flex-shrink-0",children:i.jsx("div",{className:"w-12 h-12 rounded-full bg-gradient-to-br from-accent-cyan/20 to-accent-purple/20 border border-accent-cyan/30 flex items-center justify-center",children:i.jsx(e,{className:"h-5 w-5 text-accent-cyan"})})}),i.jsxs("div",{children:[i.jsx("p",{className:"text-xs font-medium uppercase tracking-wider text-accent-cyan mb-1",children:n}),i.jsx("h4",{className:"font-semibold text-white text-sm mb-1",children:t}),i.jsx("p",{className:"text-sm text-gray-500 leading-relaxed",children:a})]})]}),Jz=()=>{const[e,t]=T.useState({name:"",company:"",email:"",country:""}),[n,a]=T.useState({}),[r,s]=T.useState(!1),[o,l]=T.useState(!1),c=()=>{const p={};return e.name.trim()||(p.name="Full name is required"),e.company.trim()||(p.company="Company name is required"),e.email.trim()?pA(e.email)?Kz(e.email)||(p.email="Please use your corporate email (Gmail, Hotmail, etc. are not accepted)"):p.email="Enter a valid email address":p.email="Email is required",e.country||(p.country="Please select a country"),a(p),Object.keys(p).length===0},u=async p=>{if(p.preventDefault(),!!c()){s(!0);try{await fetch("/api/lead",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,source:"Google Ads",landingUrl:window.location.href,...Xz()})})}catch(f){console.error("Lead submission error:",f)}Dn("landing-meraki-en"),s(!1),l(!0),setTimeout(()=>{window.location.href="/landing-meraki-thank-you"},3e3)}},d=(p,f)=>{t(g=>({...g,[p]:f})),n[p]&&a(g=>{const y={...g};return delete y[p],y})},m=i.jsx("div",{className:"bg-dark-elevated border border-dark-border rounded-2xl p-6 sm:p-8 shadow-xl",children:o?i.jsxs(M.div,{initial:{opacity:0,scale:.95}
9741,animate:{opacity:1,scale:1},transition:{duration:.4},className:"text-center py-8",children:[i.jsx("div",{className:"w-16 h-16 rounded-full bg-accent-cyan/10 flex items-center justify-center mx-auto mb-4",children:i.jsx(ze,{className:"h-8 w-8 text-accent-cyan"})}),i.jsx("h3",{className:"text-xl font-semibold mb-2",children:"Thank you!"}),i.jsx("p",{className:"text-gray-400",children:"We are redirecting you to schedule your demo."}),i.jsx("div",{className:"mt-4 flex justify-center",children:i.jsx("div",{className:"w-6 h-6 border-2 border-accent-cyan border-t-transparent rounded-full animate-spin"})})]}):i.jsxs(i.Fragment,{children:[i.jsx("h2",{className:"text-xl font-semibold mb-2",children:"Schedule a 30-minute demo"}),i.jsx("p",{className:"text-sm text-gray-400 mb-6",children:"Discover how Selent lets you operate Cisco Meraki with greater control, visibility, and security."}),i.jsxs("form",{onSubmit:u,className:"space-y-4",children:[i.jsxs("div",{children:[i.jsxs("label",{className:"block text-sm font-medium text-gray-300 mb-1.5",children:["Full name ",i.jsx("span",{className:"text-accent-red",children:"*"})]}),i.jsx("input",{type:"text",value:e.name,onChange:p=>d("name",p.target.value),placeholder:"Your full name",className:`w-full px-4 py-3 bg-dark-base border rounded-lg text-white placeholder-gray-500 focus:outline-none transition-colors ${n.name?"border-accent-red":"border-dark-border focus:border-accent-cyan"}`}),n.name&&i.jsxs("p",{className:"mt-1 text-sm text-accent-red flex items-center gap-1",children:[i.jsx(ge,{className:"h-3.5 w-3.5"}),n.name]})]}),i.jsxs("div",{children:[i.jsxs("label",{className:"block text-sm font-medium text-gray-300 mb-1.5",children:["Company ",i.jsx("span",{className:"text-accent-red",children:"*"})]}),i.jsx("input",{type:"text",value:e.company,onChange:p=>d("company",p.target.value),placeholder:"Your company name",className:`w-full px-4 py-3 bg-dark-base border rounded-lg text-white placeholder-gray-500 focus:outline-none transition-colors ${n.company?"border-accent-red":"border-dark-border focus:border-accent-cyan"}`}),n.company&&i.jsxs("p",{className:"mt-1 text-sm text-accent-red flex items-center gap-1",children:[i.jsx(ge,{className:"h-3.5 w-3.5"}),n.company]})]}),i.jsxs("div",{children:[i.jsxs("label",{className:"block text-sm font-medium text-gray-300 mb-1.5",children:["Corporate email ",i.jsx("span",{className:"text-accent-red",children:"*"})]}),i.jsx("input",{type:"email",value:e.email,onChange:p=>d("email",p.target.value),placeholder:"[email protected]",className:`w-full px-4 py-3 bg-dark-base border rounded-lg text-white placeholder-gray-500 focus:outline-none transition-colors ${n.email?"border-accent-red":"border-dark-border focus:border-accent-cyan"}`}),n.email&&i.jsxs("p",{className:"mt-1 text-sm text-accent-red flex items-center gap-1",children:[i.jsx(ge,{className:"h-3.5 w-3.5"}),n.email]})]}),i.jsx(Zz,{value:e.country,onChange:p=>d("country",p),error:n.country}),i.jsx("button",{type:"submit",disabled:r,className:"w-full py-3.5 bg-accent-cyan text-dark-base font-semibold rounded-lg hover:bg-accent-cyan-dark transition-colors disabled:opacity-60 disabled:cursor-not-allowed mt-2",children:r?"Submitting...":"Schedule demo"}),i.jsx("p",{className:"text-xs text-gray-500 text-center mt-3",children:"By submitting this form, you will be redirected to schedule a meeting. We do not share your information with third parties."})]})]})});return i.jsxs(i.Fragment,{children:[i.jsx(it,{title:"Reliable backup and restore for Cisco Meraki | Selent",description:"A misconfigured change in Cisco Meraki can bring your network down. Selent lets you back up, audit, and restore configurations securely and at scale.",keywords:"cisco meraki, backup, restore, configuration, network, firewall, VLAN, SSID, network management, Selent",url:"https://selent.ai/landing-meraki-en"}),i.jsxs("div",{className:"min-h-screen bg-dark-base text-white",children:[i.jsx("header",{className:"w-full sticky top-0 z-50 glass-card backdrop-blur-xl border-b border-dark-border/50",children:i.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:i.jsx("div",{className:"flex items-center py-5",children:i.jsx("img",{alt:"Selent logo",src:"/logo_white.png",className:"h-10 w-auto object-contain"})})})}),i.jsxs("section",{className:"relative overflow-hidden",children:[i.jsx(pe,{opacity:.02}),i.jsxs("div",{className:"absolute inset-0 pointer-events-none",children:[i.jsx("div",{className:"absolute top-0 left-1/4 w-96 h-96 bg-accent-cyan/5 rounded-full blur-3xl"}),i.jsx("div",{className:"absolute bottom-0 right-1/4 w-96 h-96 bg-accent-purple/5 rounded-full blur-3xl"})]}),i.jsx("div",{className:"relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12 lg:py-20",children:i.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-12 lg:gap-12 items-start",children:[i.jsxs(M.div,{className:"lg:col-span-7",initial:{opacity:0,x:-30}
9741,animate:{opacity:1,x:0},transition:{duration:.7,ease:[.23,1,.32,1]},children:[i.jsxs("h1",{className:"text-3xl sm:text-4xl lg:text-[2.75rem] xl:text-5xl font-bold leading-tight mb-6",children:["Reliable backup and restore for"," ",i.jsx("span",{className:"text-accent-cyan",children:"Cisco Meraki"})]}),i.jsx("p",{className:"text-lg text-gray-400 mb-5 leading-relaxed",children:"A misconfigured change in Cisco Meraki can bring your network down. Selent lets you back up, audit, and restore configurations securely and at scale."}),i.jsx("p",{className:"text-gray-400 mb-8 leading-relaxed",children:"Reverting erroneous changes in Cisco Meraki can be slow and risky without the right tools. A mistake in firewall rules, VLANs, or SSIDs can compromise business continuity. Selent provides tools designed specifically to operate Cisco Meraki safely and professionally."}),i.jsx("p",{className:"text-sm text-gray-500 border-l-2 border-accent-cyan/30 pl-4 mb-8",children:"Built by a team with Cisco experience. Validated for enterprise environments."}),i.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[i.jsx("a",{href:"https://marketplace.cisco.com/en-US/apps/502978/selentai",target:"_blank",rel:"noopener noreferrer",className:"block",children:i.jsx(By,{icon:qc,subtitle:"Technology Partner",title:"Cisco Meraki Technology Partner",description:"Official technology partner with deep API integration and certified compatibility."})}),i.jsx("a",{href:"https://marketplace.cisco.com/en-US/apps/502978/selentai",target:"_blank",rel:"noopener noreferrer",className:"block",children:i.jsx(By,{icon:Bc,subtitle:"Cisco Partner",title:"Select Developer",description:"Elite developer status with advanced platform access and priority support."})})]})]}),i.jsx(M.div,{className:"lg:col-span-5 lg:sticky lg:top-28",initial:{opacity:0,x:30},animate:{opacity:1,x:0},transition:{duration:.7,delay:.2,ease:[.23,1,.32,1]},children:m})]})})]}),i.jsxs("section",{className:"relative border-t border-dark-border/50",children:[i.jsx(pe,{opacity:.015}),i.jsxs("div",{className:"relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-16 lg:py-20",children:[i.jsxs(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0,margin:"-80px"},transition:{duration:.6},className:"text-center mb-12",children:[i.jsxs("h2",{className:"text-2xl sm:text-3xl font-bold mb-3",children:["Everything you need to operate ",i.jsx("span",{className:"text-accent-cyan",children:"Cisco Meraki"})," with confidence"]}),i.jsx("p",{className:"text-gray-400 max-w-2xl mx-auto",children:"Backup, visibility, intelligence, and compliance in a single platform."})]}),i.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-5",children:[i.jsx(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5,delay:0},children:i.jsx(nl,{icon:ta,title:"Cisco Meraki Configuration Backup",badge:"Popular",items:[{icon:qe,text:"Automated backup: MX Firewalls, MS Switches, MR Access Points, MV Cameras"},{icon:Fc,text:"Complete network configuration snapshots"},{icon:jn,text:"Template and policy backup"},{icon:Xc,text:"Configuration sync across organizations"},{icon:Yc,text:"Full Meraki Dashboard API integration"}]})}),i.jsx(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5,delay:.1},children:i.jsx(nl,{icon:br,title:"Intelligent Change Detection",items:[{icon:$c,text:"Automatic configuration change analysis"},{icon:Zn,text:"Impact explanation in plain language"},{icon:na,text:"VLAN and subnet change tracking"},{icon:Pa,text:"Firewall rule tracking"},{icon:Kc,text:"Wireless SSID configuration tracking"},{icon:Vc,text:"Switch port tracking"}]})}),i.jsx(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5,delay:.2},children:i.jsx(nl,{icon:ea,title:"Natural Language Search (AI-Powered)",items:[{icon:at,text:"Search configurations using plain language"},{icon:lo,text:"Find devices by IP or MAC address"},{icon:Pa,text:"Search firewall rules by port"},{icon:oo,text:"Locate VLANs and subnets"},{icon:Zc,text:"Query wireless configurations"}]})}),i.jsx(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5,delay:.3},children:i.jsx(nl,{icon:Uc,title:"Compliance Monitoring",badge:"Coming Soon",items:[{icon:so,text:"PC
9741I DSS compliance checks"},{icon:oe,text:"802.1X authentication auditing"},{icon:Wc,text:"Firewall rule validation"},{icon:qe,text:"Guest network isolation verification"}]})})]})]})]}),i.jsx("section",{className:"relative border-t border-dark-border/50",children:i.jsx("div",{className:"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-16 lg:py-20",children:i.jsxs(M.blockquote,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0,margin:"-50px"},transition:{duration:.6},className:"relative",children:[i.jsx("div",{className:"absolute -top-4 -left-2 text-accent-cyan/20",children:i.jsx(Qc,{className:"h-12 w-12"})}),i.jsx("p",{className:"text-lg sm:text-xl text-gray-300 leading-relaxed italic pl-8",children:"âBefore Selent, rolling back a change in Meraki was manual and stressful. Now we have clear snapshots and the peace of mind of being able to restore in minutes.â"}),i.jsxs("footer",{className:"mt-6 pl-8",children:[i.jsx("p",{className:"text-sm font-medium text-white",children:"Carlos M."}),i.jsx("p",{className:"text-sm text-gray-500",children:"Network Administrator, enterprise company in Latin America"})]})]})})}),i.jsxs("section",{className:"relative border-t border-dark-border/50 bg-dark-elevated/50",children:[i.jsx(pe,{opacity:.015}),i.jsx("div",{className:"relative z-10 max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-16 lg:py-20",children:i.jsxs(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0,margin:"-50px"},transition:{duration:.6},children:[i.jsx("h2",{className:"text-2xl font-bold mb-6",children:"About Selent"}),i.jsxs("div",{className:"space-y-4 text-gray-400 leading-relaxed",children:[i.jsx("p",{children:"Selent is a platform designed to operate Cisco Meraki networks securely, at scale, and professionally."}),i.jsx("p",{children:"The team is composed of professionals with prior experience at Cisco and in operating complex enterprise networks. Selent has been validated in production environments where operational continuity and change control are critical."})]})]})})]}),i.jsx("footer",{className:"border-t border-dark-border py-8",children:i.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:i.jsxs("div",{className:"flex flex-col sm:flex-row justify-between items-center gap-4",children:[i.jsx("img",{alt:"Selent logo",src:"/logo_white.png",className:"h-8 w-auto object-contain"}),i.jsxs("p",{className:"text-sm text-gray-500",children:["© ",new Date().getFullYear()," Selent. All rights reserved."]})]})})})]})]})};function e9(){return i.jsxs(i.Fragment,{children:[i.jsx(it,{title:"Page Not Found",description:"The page you're looking for doesn't exist. Return to the Selent homepage.",url:"https://selent.ai/404",noindex:!0}),i.jsxs("div",{className:"w-full min-h-screen font-sans text-white bg-dark-base",children:[i.jsx(fo,{}),i.jsx("main",{className:"flex-1 flex items-center justify-center px-4 py-24",children:i.jsxs("div",{className:"text-center max-w-md",children:[i.jsx("p",{className:"text-7xl font-bold text-accent-cyan mb-4",children:"404"}),i.jsx("h1",{className:"text-2xl font-bold text-white mb-4",children:"Page Not Found"}),i.jsx("p",{className:"text-gray-400 mb-8",children:"The page you're looking for doesn't exist or has been moved."}),i.jsxs(Ne,{to:"/",className:"inline-flex items-center px-6 py-3 bg-accent-cyan text-dark-base font-medium rounded-lg hover:bg-accent-cyan-dark transition-colors",children:[i.jsx(ms,{className:"mr-2 h-4 w-4"}),"Back to Home"]})]})}),i.jsx(go,{})]})]})}const al=({icon:e,title:t,badge:n,items:a})=>i.jsxs("div",{className:"bg-dark-card/50 border border-dark-border rounded-xl p-5 h-full",children:[i.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[i.jsx("div",{className:"w-9 h-9 rounded-lg bg-accent-cyan/10 flex items-center justify-center flex-shrink-0",children:i.jsx(e,{className:"h-[18px] w-[18px] text-accent-cyan"})}),i.jsx("h3",{className:"font-semibold text-white text-sm leading-snug",children:t}),n&&i.jsx("span",{className:"ml-auto text-[10px] font-medium uppercase tracking-wider px-2 py-0.5 rounded-full bg-accent-cyan/10 text-accent-cyan border border-accent-cyan/20 whitespace-nowrap",children:n})]}),i.jsx("ul",{className:"space-y-2.5",children:a.map((r,s)=>i.jsxs("li",{className:"flex items-start gap-2.5 text-sm text-gray-400",children:[i.jsx(r.icon,{className:"h-3.5 w-3.5 text-accent-cyan/60 mt-0.5 flex-shrink-0"}),i.jsx("span",{children:r.text})]},s))})]}),Fy=({icon:e,title:t,subtitle:n,description:a})=>i.jsxs("div",{className:"flex items-start gap-4 bg-dark-card/60 border border-dark-border rounded-xl p-5",children:[i.jsx("div",{className:"flex-shrink-0",children:i.jsx("div",{className:"w-12 h-12 rounded-full bg-gradient-to-br from-accent-cyan/20 to-accent-purple/20 border border-accent-cyan/30 flex items-center justify-center",children:i.jsx(e,{className:"h-5 w-5 text-accent-cyan"})})}),i.jsxs("div",{children:[i.jsx("p",{className:"text-xs font-medium uppercase tracking-wider text-accent-cyan mb-1",children:n}),i.jsx("h4",{className:"font-semibold text-white text-sm mb-1",children:t}),i.jsx("p",{className:"text-sm text-gray-500 leading-relaxed",children:a})]})]}),t9=()=>{const e=i.jsx("div",{className:"bg-dark-elevated border border-dark-border rounded-2xl p-6 sm:p-8 shadow-xl",children:i.jsxs(M.div,{initial:{opacity:0,scale:.95}
9741,animate:{opacity:1,scale:1},transition:{duration:.5},className:"text-center py-6",children:[i.jsx("div",{className:"w-16 h-16 rounded-full bg-accent-cyan/10 flex items-center justify-center mx-auto mb-5",children:i.jsx(ze,{className:"h-8 w-8 text-accent-cyan"})}),i.jsx("h2",{className:"text-2xl font-semibold mb-3",children:"Thank you for your interest!"}),i.jsx("p",{className:"text-gray-400 mb-6 leading-relaxed",children:"We received your request. Our team will contact you shortly to schedule a personalized demo."}),i.jsxs("div",{className:"space-y-3 text-left max-w-xs mx-auto",children:[i.jsxs("div",{className:"flex items-center gap-3 text-sm text-gray-400",children:[i.jsx(gn,{className:"h-4 w-4 text-accent-cyan flex-shrink-0"}),i.jsx("span",{children:"Check your inbox"})]}),i.jsxs("div",{className:"flex items-center gap-3 text-sm text-gray-400",children:[i.jsx(qt,{className:"h-4 w-4 text-accent-cyan flex-shrink-0"}),i.jsx("span",{children:"We will contact you within 24 hours"})]})]})]})});return i.jsxs(i.Fragment,{children:[i.jsx(it,{title:"Thank you for your request | Selent",description:"We received your demo request. Our team will c
9741ontact you shortly.",keywords:"cisco meraki, backup, restore, configuration, network, firewall, VLAN, SSID, network management, Selent",url:"https://selent.ai/landing-meraki-thank-you",noindex:!0}),i.jsxs("div",{className:"min-h-screen bg-dark-base text-white",children:[i.jsx("header",{className:"w-full sticky top-0 z-50 glass-card backdrop-blur-xl border-b border-dark-border/50",children:i.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:i.jsx("div",{className:"flex items-center py-5",children:i.jsx("img",{alt:"Selent logo",src:"/logo_white.png",className:"h-10 w-auto object-contain"})})})}),i.jsxs("section",{className:"relative overflow-hidden",children:[i.jsx(pe,{opacity:.02}),i.jsxs("div",{className:"absolute inset-0 pointer-events-none",children:[i.jsx("div",{className:"absolute top-0 left-1/4 w-96 h-96 bg-accent-cyan/5 rounded-full blur-3xl"}),i.jsx("div",{className:"absolute bottom-0 right-1/4 w-96 h-96 bg-accent-purple/5 rounded-full blur-3xl"})]}),i.jsx("div",{className:"relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12 lg:py-20",children:i.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-12 lg:gap-12 items-start",children:[i.jsxs(M.div,{className:"lg:col-span-7",initial:{opacity:0,x:-30},animate:{opacity:1,x:0},transition:{duration:.7,ease:[.23,1,.32,1]},children:[i.jsxs("h1",{className:"text-3xl sm:text-4xl lg:text-[2.75rem] xl:text-5xl font-bold leading-tight mb-6",children:["Reliable backup and restore for"," ",i.jsx("span",{className:"text-accent-cyan",children:"Cisco Meraki"})]}),i.jsx("p",{className:"text-lg text-gray-400 mb-5 leading-relaxed",children:"A misconfigured change in Cisco Meraki can bring your network down. Selent lets you back up, audit, and restore configurations securely and at scale."}),i.jsx("p",{className:"text-gray-400 mb-8 leading-relaxed",children:"Reverting erroneous changes in Cisco Meraki can be slow and risky without the right tools. A mistake in firewall rules, VLANs, or SSIDs can compromise business continuity. Selent provides tools designed specifically to operate Cisco Meraki safely and professionally."}),i.jsx("p",{className:"text-sm text-gray-500 border-l-2 border-accent-cyan/30 pl-4 mb-8",children:"Built by a team with Cisco experience. Validated for enterprise environments."}),i.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[i.jsx("a",{href:"https://marketplace.cisco.com/en-US/apps/502978/selentai",target:"_blank",rel:"noopener noreferrer",className:"block",children:i.jsx(Fy,{icon:qc,subtitle:"Technology Partner",title:"Cisco Meraki Technology Partner",description:"Official technology partner with deep API integration and certified compatibility."})}),i.jsx("a",{href:"https://marketplace.cisco.com/en-US/apps/502978/selentai",target:"_blank",rel:"noopener noreferrer",className:"block",children:i.jsx(Fy,{icon:Bc,subtitle:"Cisco Partner",title:"Select Developer",description:"Elite developer status with advanced platform access and priority support."})})]})]}),i.jsx(M.div,{className:"lg:col-span-5 lg:sticky lg:top-28",initial:{opacity:0,x:30},animate:{opacity:1,x:0},transition:{duration:.7,delay:.2,ease:[.23,1,.32,1]},children:e})]})})]}),i.jsxs("section",{className:"relative border-t border-dark-border/50",children:[i.jsx(pe,{opacity:.015}),i.jsxs("div",{className:"relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-16 lg:py-20",children:[i.jsxs(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0,margin:"-80px"},transition:{duration:.6},className:"text-center mb-12",children:[i.jsxs("h2",{className:"text-2xl sm:text-3xl font-bold mb-3",children:["Everything you need to operate ",i.jsx("span",{className:"text-accent-cyan",children:"Cisco Meraki"})," with confidence"]}),i.jsx("p",{className:"text-gray-400 max-w-2xl mx-auto",children:"Backup, visibility, intelligence, and compliance in a single platform."})]}),i.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-5",children:[i.jsx(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5,delay:0},children:i.jsx(al,{icon:ta,title:"Cisco Meraki Configuration Backup",badge:"Popular",items:[{icon:qe,text:"Automated backup: MX Firewalls, MS Switches, MR Access Points, MV Cameras"},{icon:Fc,text:"Complete network configuration snapshots"},{icon:jn,text:"Template and policy backup"},{icon:Xc,text:"Configuration sync across organizations"},{icon:Yc,text:"Full Meraki Dashboard API integration"}]})}),i.jsx(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5,delay:.1},children:i.jsx(al,{icon:br,title:"Intelligent Change Detection",items:[{icon:$c,text:"Automatic configuration change analysis"},{icon:Zn,text:"Impact explanation in plain language"},{icon:na,text:"VLAN and subnet change tracking"},{icon:Pa,text:"Firewall rule tracking"},{icon:Kc,text:"Wireless SSID configuration tracking"},{icon:Vc,text:"Switch port tracking"}]})}),i.jsx(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5,delay:.2},children:i.jsx(al,{icon:ea,title:"Natural Language Search (AI-Powered)",items:[{icon:at,text:"Search configurations using plain language"},{icon:lo,text:"Find devices by IP or MAC address"}
9741,{icon:Pa,text:"Search firewall rules by port"},{icon:oo,text:"Locate VLANs and subnets"},{icon:Zc,text:"Query wireless configurations"}]})}),i.jsx(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5,delay:.3},children:i.jsx(al,{icon:Uc,title:"Compliance Monitoring",badge:"Coming Soon",items:[{icon:so,text:"PCI DSS compliance checks"},{icon:oe,text:"802.1X authentication auditing"},{icon:Wc,text:"Firewall rule validation"},{icon:qe,text:"Guest network isolation verification"}]})})]})]})]}),i.jsx("section",{className:"relative border-t border-dark-border/50",children:i.jsx("div",{className:"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-16 lg:py-20",children:i.jsxs(M.blockquote,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0,margin:"-50px"},transition:{duration:.6},className:"relative",children:[i.jsx("div",{className:"absolute -top-4 -left-2 text-accent-cyan/20",children:i.jsx(Qc,{className:"h-12 w-12"})}),i.jsx("p",{className:"text-lg sm:text-xl text-gray-300 leading-relaxed italic pl-8",children:"âBefore Selent, rolling back a change in Meraki was manual and stressful. Now we have clear snapshots and the peace of mind of being able to restore in minutes.â"}),i.jsxs("footer",{className:"mt-6 pl-8",children:[i.jsx("p",{className:"text-sm font-medium text-white",children:"Carlos M."}),i.jsx("p",{className:"text-sm text-gray-500",children:"Network Administrator, enterprise company in Latin America"})]})]})})}),i.jsxs("section",{className:"relative border-t border-dark-border/50 bg-dark-elevated/50",children:[i.jsx(pe,{opacity:.015}),i.jsx("div",{className:"relative z-10 max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-16 lg:py-20",children:i.jsxs(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0,margin:"-50px"},transition:{duration:.6},children:[i.jsx("h2",{className:"text-2xl font-bold mb-6",children:"About Selent"}),i.jsxs("div",{className:"space-y-4 text-gray-400 leading-relaxed",children:[i.jsx("p",{children:"Selent is a platform designed to operate Cisco Meraki networks securely, at scale, and professionally."}),i.jsx("p",{children:"The team is composed of professionals with prior experience at Cisco and in operating complex enterprise networks. Selent has been validated in production environments where operational continuity and change control are critical."})]})]})})]}),i.jsx("footer",{className:"border-t border-dark-border py-8",children:i.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:i.jsxs("div",{className:"flex flex-col sm:flex-row justify-between items-center gap-4",children:[i.jsx("img",{alt:"Selent logo",src:"/logo_white.png",className:"h-8 w-auto object-contain"}),i.jsxs("p",{className:"text-sm text-gray-500",children:["© ",new Date().getFullYear()," Selent. All rights reserved."]})]})})})]})]})},Hy=["Argentina","Australia","Bolivia","Brazil","Canada","Chile","Colombia","Costa Rica","Cuba","Ecuador","El Salvador","France","Germany","Guatemala","Honduras","Italy","Japan","Mexico","Nicaragua","Panama","Paraguay","Peru","Portugal","Puerto Rico","Dominican Republic","Spain","United Kingdom","United States","Uruguay","Venezuela","Other"],n9=["gmail.com","yahoo.com","hotmail.com","outlook.com","live.com","aol.com","icloud.com","mail.com","protonmail.com","zoho.com","yandex.com","gmx.com","fastmail.com","tutanota.com","hey.com","pm.me","msn.com","me.com","mac.com"],hA=e=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e),a9=e=>hA(e)?!n9.includes(e.toLowerCase().split("@")[1]):!1;function i9(){const e=new URLSearchParams(window.location.search);return{utmSource:e.get("utm_source")||void 0,utmMedium:e.get("utm_medium")||void 0,utmCampaign:e.get("utm_campaign")||void 0,utmTerm:e.get("utm_term")||void 0,utmContent:e.get("utm_content")||void 0,gclid:e.get("gclid")||void 0}}const r9=({value:e,onChange:t,error:n})=>{const[a,r]=T.useState(!1),[s,o]=T.useState(""),l=T.useRef(null),c=T.useMemo(()=>{if(!s)return Hy;const u=s.toLowerCase();return Hy.filter(d=>d.toLowerCase().includes(u))},[s]);return T.useEffect(()=>{const u=d=>{l.current&&!l.current.contains(d.target)&&r(!1)};return document.addEventListener("mousedown",u),()=>document.removeEventListener("mousedown",u)},[]),i.jsxs("div",{ref:l,className:"relative",children:[i.jsxs("label",{className:"block text-sm font-medium text-[#94A3B8] mb-1.5",children:["Country ",i.jsx("span",{className:"text-red-400",children:"*"})]}),i.jsxs("button",{type:"button",onClick:()=>r(!a),className:`w-full px-4 py-3 rounded-[8px] bg-[#060614] border text-left flex items-center justify-between transition-colors ${n?"border-red-400":"border-[#1E1E3A] focus:border-blue-500/50"}`,children:[i.jsx("span",{className:e?"text-white":"text-[#475569]",children:e||"Select your country"}),i.jsx(Hc,{className:`h-4 w-4 text-[#475569] transition-transform ${a?"rotate-180":""}`})]}),a&&i.jsxs("div",{className:"absolute z-50 mt-1 w-full rounded-[10px] shadow-xl max-h-60 overflow-hidden",style:{background:"#0D0D20",border:"1px solid #1E1E3A"},children:[i.jsx("div",{className:"p-2 border-b border-[#1E1E3A]",children:i.jsxs("div",{className:"relative",children:[i.jsx(at,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-[#475569]"}),i.jsx("input",{type:"text",value:s,onChange:u=>o(u.target.value),placeholder:"Search country...",className:"w-full pl-9 pr-3 py-2 bg-[#060614] border border-[#1E1E3A] rounded-[6px] text-sm text-white placeholder-[#47
97415569] focus:outline-none focus:border-blue-500/50",autoFocus:!0})]})}),i.jsx("div",{className:"overflow-y-auto max-h-44",children:c.length===0?i.jsx("div",{className:"px-4 py-3 text-sm text-[#475569]",children:"No results found"}):c.map(u=>i.jsx("button",{type:"button",onClick:()=>{t(u),r(!1),o("")},className:`w-full text-left px-4 py-2.5 text-sm transition-colors hover:bg-[#0D0D30] ${u===e?"text-blue-400 bg-[#0D0D30]":"text-[#94A3B8]"}`,children:u},u))})]}),n&&i.jsxs("p",{className:"mt-1 text-sm text-red-400 flex items-center gap-1",children:[i.jsx(ge,{className:"h-3.5 w-3.5"})," ",n]})]})},Si=({icon:e,iconColor:t,title:n,desc:a,tags:r,delay:s})=>i.jsxs(M.div,{initial:{opacity:0,y:16},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.4,delay:s},className:"flex flex-col gap-3 rounded-[16px] p-5",style:{background:"linear-gradient(160deg, rgba(20,20,50,0.9) 0%, rgba(12,12,35,0.95) 100%)",border:"1px solid rgba(34,211,238,0.12)",boxShadow:"0 4px 24px rgba(0,0,0,0.3), inset 0 1px 0 rgba(255,255,255,0.04)"},children:[i.jsx(e,{className:`w-5 h-5 ${t}`}),i.jsx("h3",{className:"text-[15px] font-semibold text-white",children:n}),i.jsx("p",{className:"text-[13px] leading-[1.5] text-[#94A3B8]",children:a}),i.jsx("div",{className:"flex gap-1.5 flex-wrap mt-1",children:r.map(o=>i.jsx("span",{className:`rounded-full px-2 py-[3px] text-[10px] font-medium font-mono ${o.color==="teal"?"bg-[#4ECDC415] text-[#4ECDC4]":"bg-[#7C8DB515] text-[#7C8DB5]"}`,children:o.label},o.label))})]}),s9=({num:e,icon:t,title:n,desc:a,delay:r})=>i.jsxs(M.div,{initial:{opacity:0,y:16},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.4,delay:r},className:"flex items-start gap-4",children:[i.jsxs("div",{className:"flex flex-col items-center gap-1 shrink-0",children:[i.jsx("div",{className:"w-9 h-9 rounded-[10px] flex items-center justify-center",style:{background:"rgba(59,130,246,0.12)",border:"1px solid rgba(59,130,246,0.25)"},children:i.jsx(t,{className:"w-4 h-4 text-blue-400"})}),i.jsx("span",{className:"text-[10px] font-mono font-bold text-blue-400/60",children:e})]}),i.jsxs("div",{className:"pt-0.5",children:[i.jsx("p",{className:"text-[14px] font-semibold text-white mb-0.5",children:n}),i.jsx("p",{className:"text-[13px] leading-[1.5] text-[#64748B]",children:a})]})]}),o9=()=>{const[e,t]=T.useState({name:"",company:"",email:"",country:"",description:""}),[n,a]=T.useState({}),[r,s]=T.useState(!1),[o,l]=T.useState(!1),c=()=>{const p={};return e.name.trim()||(p.name="Full name is required"),e.company.trim()||(p.company="Company is required"),e.description.trim()||(p.description="Please describe what you need"),e.email.trim()?hA(e.email)?a9(e.email)||(p.email="Please use your corporate email address"):p.email="Enter a valid email address":p.email="Email is required",e.country||(p.country="Please select a country"),a(p),Object.keys(p).length===0},u=async p=>{if(p.preventDefault(),!!c()){s(!0);try{await fetch("/api/lead",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,source:"Contact Page",landingUrl:window.location.href,...i9()})})}catch(f){console.error("Lead submission error:",f)}Dn("contact-landing"),s(!1),l(!0),setTimeout(()=>{window.location.href="/contact-thank-you"},2500)}},d=(p,f)=>{t(g=>({...g,[p]:f})),n[p]&&a(g=>{const y={...g};return delete y[p],y})},m=i.jsx("div",{className:"rounded-[20px] p-6 sm:p-8 shadow-2xl",style:{background:"linear-gradient(160deg, rgba(20,20,55,0.95) 0%, rgba(12,12,35,0.98) 100%)",border:"1px solid rgba(59,130,246,0.25)",boxShadow:"0 8px 48px rgba(31,31,255,0.18), inset 0 1px 0 rgba(255,255,255,0.05)"},children:o?i.jsxs(M.div,{initial:{opacity:0,scale:.95},animate:{opacity:1,scale:1},transition:{duration:.4},className:"text-center py-8",children:[i.jsx("div",{className:"w-16 h-16 rounded-full flex items-center justify-center mx-auto mb-4",style:{background:"rgba(59,130,246,0.1)",border:"1px solid rgba(59,130,246,0.3)"},children:i.jsx(ze,{className:"h-8 w-8 text-blue-400"})}),i.jsx("h3",{className:"text-xl font-bold text-white mb-2",children:"Request received!"}),i.jsx("p",{className:"text-[#94A3B8]",children:"Redirecting you to confirm your submission..."}),i.jsx("div",{className:"mt-4 flex justify-center",children:i.jsx("div",{className:"w-5 h-5 border-2 border-blue-400 border-t-transparent roun
9741ded-full animate-spin"})})]}):i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[i.jsx(Gc,{className:"h-4 w-4 text-blue-400"}),i.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-[2px] text-blue-400",children:"Talk to an Expert"})]}),i.jsx("h2",{className:"text-[22px] font-bold text-white mb-1",children:"Describe your project"}),i.jsx("p",{className:"text-sm text-[#64748B] mb-6 leading-relaxed",children:"Tell us what you need on Cisco Networking. Our team will review your request and get back within 24 hours with a proposal."}),i.jsxs("form",{onSubmit:u,className:"flex flex-col gap-4",children:[i.jsxs("div",{children:[i.jsxs("label",{className:"block text-sm font-medium text-[#94A3B8] mb-1.5",children:["What do you need? ",i.jsx("span",{className:"text-red-400",children:"*"})]}),i.jsx("textarea",{value:e.description,onChange:p=>d("description",p.target.value),placeholder:"e.g., I need a dashboard that shows real-time bandwidth usage across all my MX appliances, with alerts when any link exceeds 80% utilization...",rows:4,className:`w-full px-4 py-3 rounded-[8px] bg-[#060614] border text-white placeholder-[#475569] focus:outline-none transition-colors resize-none text-sm leading-relaxed ${n.description?"border-red-400":"border-[#1E1E3A] focus:border-blue-500/50"}`}),n.description&&i.jsxs("p",{className:"mt-1 text-sm text-red-400 flex items-center gap-1",children:[i.jsx(ge,{className:"h-3.5 w-3.5"})," ",n.description]})]}),i.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[i.jsxs("div",{children:[i.jsxs("label",{className:"block text-sm font-medium text-[#94A3B8] mb-1.5",children:["Full name ",i.jsx("span",{className:"text-red-400",children:"*"})]}),i.jsx("input",{type:"text",value:e.name,onChange:p=>d("name",p.target.value),placeholder:"Jane Smith",className:`w-full px-4 py-3 rounded-[8px] bg-[#060614] border text-white placeholder-[#475569] focus:outline-none transition-colors text-sm ${n.name?"border-red-400":"border-[#1E1E3A] focus:border-blue-500/50"}`}),n.name&&i.jsxs("p",{className:"mt-1 text-xs text-red-400 flex items-center gap-1",children:[i.jsx(ge,{className:"h-3 w-3"})," ",n.name]})]}),i.jsxs("div",{children:[i.jsxs("label",{className:"block text-sm font-medium text-[#94A3B8] mb-1.5",children:["Company ",i.jsx("span",{className:"text-red-400",children:"*"})]}),i.jsx("input",{type:"text",value:e.company,onChange:p=>d("company",p.target.value),placeholder:"Acme Corp",className:`w-full px-4 py-3 rounded-[8px] bg-[#060614] border text-white placeholder-[#475569] focus:outline-none transition-colors text-sm ${n.company?"border-red-400":"border-[#1E1E3A] focus:border-blue-500/50"}`}),n.company&&i.jsxs("p",{className:"mt-1 text-xs text-red-400 flex items-center gap-1",children:[i.jsx(ge,{className:"h-3 w-3"})," ",n.company]})]})]}),i.jsxs("div",{children:[i.jsxs("label",{className:"block text-sm font-medium text-[#94A3B8] mb-1.5",children:["Corporate email ",i.jsx("span",{className:"text-red-400",children:"*"})]}),i.jsx("input",{type:"email",value:e.email,onChange:p=>d("email",p.target.value),placeholder:"[email protected]",className:`w-full px-4 py-3 rounded-[8px] bg-[#060614] border text-white placeholder-[#475569] focus:outline-none transition-colors text-sm ${n.email?"border-red-400":"border-[#1E1E3A] focus:border-blue-500/50"}`}),n.email&&i.jsxs("p",{className:"mt-1 text-sm text-red-400 flex items-center gap-1",children:[i.jsx(ge,{className:"h-3.5 w-3.5"})," ",n.email]})]}),i.jsx(r9,{value:e.country,onChange:p=>d("country",p),error:n.country}),i.jsx("button",{type:"submit",disabled:r,className:"w-full py-3.5 rounded-[10px] font-semibold text-white text-[15px] flex items-center justify-center gap-2 transition-all disabled:opacity-60 disabled:cursor-not-allowed mt-1",style:{background:r?"#2563EB":"#3B82F6"},onMouseEnter:p=>{r||(p.currentTarget.style.background="#2563EB")},onMouseLeave:p=>{r||(p.currentTarget.style.background="#3B82F6")},children:r?i.jsxs(i.Fragment,{children:[i.jsx("div",{className:"w-4 h-4 border-2 border-white border-t-transparent roun
9741ded-full animate-spin"}),"Submitting..."]}):i.jsxs(i.Fragment,{children:["Submit Project Request",i.jsx(ut,{className:"h-4 w-4"})]})}),i.jsx("p",{className:"text-[11px] text-[#475569] text-center",children:"We'll review your request and reply within 24 hours."})]})]})});return i.jsxs(i.Fragment,{children:[i.jsx(it,{title:"Build any solution on top of Cisco Networking | Selent",description:"AI agents and Cisco Networking experts build custom solutions tailored to your industry: automation scripts, analytics dashboards, compliance tools, integrations, and monitoring.",keywords:"cisco networking, cisco meraki, network automation, custom solution, analytics dashboard, compliance tools, integration, monitoring, Selent",url:"https://selent.ai/contact"}),i.jsxs("div",{className:"min-h-screen bg-dark-base text-white font-sans",children:[i.jsx("header",{className:"w-full sticky top-0 z-50 px-6 lg:px-[44px] py-4",style:{background:"rgba(10,10,11,0.92)",backdropFilter:"blur(20px)",borderBottom:"1px solid rgba(255,255,255,0.06)"},children:i.jsx("div",{className:"max-w-7xl mx-auto flex items-center",children:i.jsx("img",{alt:"Selent",src:"/logo_white.png",className:"h-9 w-auto object-contain"})})}),i.jsxs("section",{className:"relative overflow-hidden",children:[i.jsx("div",{className:"absolute inset-0 z-0",style:{background:"radial-gradient(ellipse 70% 60% at 0% 0%, rgba(37,99,235,0.12) 0%, transparent 65%), radial-gradient(ellipse 50% 50% at 100% 100%, rgba(59,130,246,0.06) 0%, transparent 60%)"}}),i.jsx("div",{className:"relative z-10 max-w-7xl mx-auto px-6 lg:px-[44px] py-14 lg:py-20",children:i.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-12 items-start",children:[i.jsxs(M.div,{className:"lg:col-span-7",initial:{opacity:0,x:-24},animate:{opacity:1,x:0},transition:{duration:.7,ease:[.23,1,.32,1]},children:[i.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 rounded-full mb-6",style:{background:"rgba(59,130,246,0.1)",border:"1px solid rgba(59,130,246,0.2)"},children:[i.jsx("div",{className:"w-1.5 h-1.5 rounded-full bg-blue-400 animate-pulse"}),i.jsx("span",{className:"text-[11px] font-semibold text-blue-400 uppercase tracking-wider",children:"Cisco Technology Partner · Select Developer"})]}),i.jsxs("h1",{className:"text-[clamp(32px,4.5vw,56px)] font-bold leading-[1.05] tracking-[-1.5px] mb-5 text-white",children:["Build any solution on top of"," ",i.jsx("span",{className:"bg-clip-text text-transparent",style:{backgroundImage:"linear-gradient(90deg, #60A5FA, #34D399)"},children:"Cisco Networking"})]}),i.jsx("p",{className:"text-lg text-[#94A3B8] mb-8 leading-relaxed max-w-[560px]",children:"AI agents and Cisco Networking experts build custom solutions tailored to your industry â automation scripts, analytics dashboards, control UIs, compliance tools, integrations, and monitoring."}),i.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3 mb-10",children:[{icon:Pn,color:"text-[#4ECDC4]",title:"Automation Scripts",tags:["Provisioning","Bulk changes"]},{icon:In,color:"text-[#7C8DB5]",title:"Analytics Dashboards",tags:["Real-time","Custom metrics"]},{icon:mn,color:"text-[#4ECDC4]",title:"Control UIs",tags:["Role-based","Simplified"]},{icon:gi,color:"text-[#7C8DB5]",title:"Compliance Tools",tags:["PCI DSS","Audit reports"]},{icon:Ma,color:"text-[#4ECDC4]",title:"Custom Integrations",tags:["ServiceNow","Splunk"]},{icon:fi,color:"text-[#7C8DB5]",title:"Monitoring & Alerts",tags:["AI-powered","24/7"]}].map(({icon:p,color:f,title:g,tags:y},w)=>i.jsxs(M.div,{initial:{opacity:0,y:12},animate:{opacity:1,y:0},transition:{duration:.4,delay:.1+w*.05},className:"flex items-center gap-3 rounded-[12px] px-4 py-3",style:{background:"rgba(15,15,40,0.6)",border:"1px solid rgba(255,255,255,0.06)"},children:[i.jsx(p,{className:`w-4 h-4 ${f} shrink-0`}),i.jsxs("div",{className:"min-w-0",children:[i.jsx("p",{className:"text-[13px] font-semibold text-white leading-tight",children:g}),i.jsx("p",{className:"text-[11px] text-[#64748B]",children:y.join(" · ")})]})]},g))}),i.jsxs("div",{className:"rounded-[16px] p-5 mb-8",style:{background:"rgba(10,10,30,0.6)",border:"1px solid rgba(255,255,255,0.06)"},children:[i.jsx("p",{className:"text-[11px] font-semibold uppercase tracking-[2px] text-[#475569] mb-4",children:"How it works"}),i.jsx("div",{className:"flex flex-col gap-5",children:[{num:"01",icon:ic,title:"Submit your request",desc:"Describe your challenge in plain language."},{num:"02",icon:tt,title:"AI + experts build a proposal",desc:"Clear deliverables, timeline, and pricing."},{num:"03",icon:jn,title:"You approve",desc:"Full access to the codebase, always."},{num:"04",icon:oe,title:"We build & deliver",desc:"Deployed, tested, and production-ready."}].map(p=>i.jsx(s9,{...p,delay:0},p.num))})]}),i.jsx("div",{className:"flex items-center gap-4 flex-wrap",children:[{alt:"Cisco Meraki Technology Partner",src:"/cisco-meraki-partner.webp"},{alt:"Cisco Select Developer",src:"/cisco-meraki-select-developer.webp"}].map(p=>i.jsx("a",{href:"https://marketplace.cisco.com/en-US/apps/502978/selentai",target:"_blank",rel:"noopener noreferrer",className:"rounded-xl flex items-center px-4 py-3",style:{background:"rgba(235,235,246,0.06)",border:"1px solid rgba(255,255,255,0.08)"},children:i.jsx("img",{alt:p.alt,src:p.src,className:"h-10 w-auto object-contain opacity-80"})},p.alt))})]}),i.jsx(M.div,{className:"lg:col-span-5 lg:sticky lg:top-24",initial:{opacity:0,x:24}
9741,animate:{opacity:1,x:0},transition:{duration:.7,delay:.2,ease:[.23,1,.32,1]},children:m})]})})]}),i.jsx("div",{className:"h-[1px] w-full",style:{background:"linear-gradient(90deg, transparent 0%, #3B82F6 50%, transparent 100%)"}}),i.jsx("section",{className:"py-16 lg:py-20",children:i.jsxs("div",{className:"max-w-7xl mx-auto px-6 lg:px-[44px]",children:[i.jsxs(M.div,{initial:{opacity:0,y:16},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5},className:"text-center mb-10",children:[i.jsxs("div",{className:"inline-flex items-center gap-2 rounded-full px-[14px] py-[6px] mb-4",style:{background:"#141416",border:"1px solid #262629"},children:[i.jsx(mn,{className:"w-3.5 h-3.5 text-blue-400"}),i.jsx("span",{className:"text-[11px] font-semibold text-blue-400 tracking-[2px]",children:"SOLUTIONS"})]}),i.jsx("h2",{className:"text-[28px] sm:text-[36px] font-bold text-white mb-3",children:"Whatever you need on Cisco Networking, we build it"}),i.jsx("p",{className:"text-[#94A3B8] max-w-[540px] mx-auto",children:"From simple automation to complex custom platforms â every solution is built for your specific environment."})]}),i.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:[i.jsx(Si,{icon:Pn,iconColor:"text-[#4ECDC4]",title:"Automation Scripts",desc:"Automate repetitive tasks: bulk provisioning, config templates, scheduled changes, and API-driven workflows.",tags:[{label:"Python",color:"teal"},{label:"Cisco API",color:"teal"},{label:"Webhooks",color:"muted"}],delay:0}),i.jsx(Si,{icon:In,iconColor:"text-[#7C8DB5]",title:"Analytics Dashboards",desc:"Custom dashboards with real-time metrics, traffic analysis, device health, and historical trends.",tags:[{label:"Real-time",color:"teal"},{label:"Visualization",color:"muted"},{label:"Alerts",color:"muted"}],delay:.05}),i.jsx(Si,{icon:mn,iconColor:"text-[#4ECDC4]",title:"Control UIs",desc:"Purpose-built interfaces for network operators: simplified views, bulk actions, and role-based access.",tags:[{label:"React",color:"teal"},{label:"Role-based",color:"muted"},{label:"Custom",color:"muted"}],delay:.1}),i.jsx(Si,{icon:gi,iconColor:"text-[#7C8DB5]",title:"Compliance Tools",desc:"Automated compliance checks, audit trails, policy enforcement, and regulatory reporting.",tags:[{label:"PCI DSS",color:"teal"},{label:"Audit",color:"muted"},{label:"Policies",color:"muted"}],delay:.15}),i.jsx(Si,{icon:Ma,iconColor:"text-[#4ECDC4]",title:"Custom Integrations",desc:"Connect Cisco Networking with your existing tools: ITSM, monitoring platforms, identity providers, and more.",tags:[{label:"Cisco API",color:"teal"},{label:"ServiceNow",color:"muted"},{label:"Splunk",color:"muted"}],delay:.2}),i.jsx(Si,{icon:fi,iconColor:"text-[#7C8DB5]",title:"Monitoring & Alerts",desc:"Proactive monitoring with intelligent alerts, anomaly detection, and automated incident response.",tags:[{label:"AI-Powered",color:"teal"},{label:"Proactive",color:"muted"},{label:"24/7",color:"muted"}],delay:.25})]})]})}),i.jsx("div",{className:"h-[1px] w-full",style:{background:"linear-gradient(90deg, transparent 0%, #3B82F6 50%, transparent 100%)"}}),i.jsx("section",{className:"py-16 lg:py-20",style:{background:"rgba(6,6,16,0.8)"},children:i.jsx("div",{className:"max-w-4xl mx-auto px-6 lg:px-[44px]",children:i.jsxs(M.blockquote,{initial:{opacity:0,y:16},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.6},className:"relative",children:[i.jsx("div",{className:"absolute left-0 top-0 bottom-0 w-[3px] rounded-full",style:{background:"linear-gradient(180deg, #3B82F6, #34D399)"}}),i.jsxs("div",{className:"pl-8",children:[i.jsx("p",{className:"text-xl sm:text-2xl lg:text-[28px] font-light text-[#CBD5E1] leading-[1.5] italic mb-6",children:"âWe described what we needed â a real-time bandwidth dashboard with alerts â and Selent had it built and deployed in under a week. It fit our Meraki environment perfectly. No generic tool would have done that.â"}),i.jsxs("footer",{className:"flex items-center gap-4",children:[i.jsx("div",{className:"w-10 h-10 rounded-full flex items-center justify-center shrink-0",style:{background:"rgba(59,130,246,0.15)",border:"1px solid rgba(59,130,246,0.25)"},children:i.jsx("span",{className:"text-sm font-bold text-blue-400",children:"MR"})}),i.jsxs("div",{children:[i.jsx("p",{className:"text-sm font-semibold text-white",children:"Michael R."}),i.jsx("p",{className:"text-sm text-[#64748B]",children:"VP of IT Infrastru
9741cture · Healthcare company, United States"})]})]})]})]})})}),i.jsx("footer",{style:{borderTop:"1px solid rgba(255,255,255,0.06)"},className:"py-8",children:i.jsx("div",{className:"max-w-7xl mx-auto px-6 lg:px-[44px]",children:i.jsxs("div",{className:"flex flex-col sm:flex-row justify-between items-center gap-4",children:[i.jsx("img",{alt:"Selent",src:"/logo_white.png",className:"h-8 w-auto object-contain"}),i.jsxs("p",{className:"text-sm text-[#475569]",children:["© ",new Date().getFullYear()," Selent. All rights reserved."]})]})})})]})]})},l9=()=>i.jsxs(i.Fragment,{children:[i.jsx(it,{title:"Request received â We'll be in touch | Selent",description:"We received your project request. Our team will review it and get back to you within 24 hours with a proposal.",keywords:"cisco networking, cisco meraki, network automation, Selent",url:"https://selent.ai/contact-thank-you",noindex:!0}),i.jsxs("div",{className:"min-h-screen bg-dark-base text-white font-sans",children:[i.jsx("header",{className:"w-full sticky top-0 z-50 px-6 lg:px-[44px] py-4",style:{background:"rgba(10,10,11,0.92)",backdropFilter:"blur(20px)",borderBottom:"1px solid rgba(255,255,255,0.06)"},children:i.jsx("div",{className:"max-w-7xl mx-auto flex items-center",children:i.jsx("img",{alt:"Selent",src:"/logo_white.png",className:"h-9 w-auto object-contain"})})}),i.jsxs("section",{className:"relative overflow-hidden",children:[i.jsx("div",{className:"absolute inset-0 z-0",style:{background:"radial-gradient(ellipse 70% 60% at 0% 0%, rgba(37,99,235,0.12) 0%, transparent 65%), radial-gradient(ellipse 50% 50% at 100% 100%, rgba(59,130,246,0.06) 0%, transparent 60%)"}}),i.jsx("div",{className:"relative z-10 max-w-7xl mx-auto px-6 lg:px-[44px] py-14 lg:py-20",children:i.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-12 items-start",children:[i.jsxs(M.div,{className:"lg:col-span-7",initial:{opacity:0,x:-24},animate:{opacity:1,x:0},transition:{duration:.7,ease:[.23,1,.32,1]},children:[i.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 rounded-full mb-6",style:{background:"rgba(59,130,246,0.1)",border:"1px solid rgba(59,130,246,0.2)"},children:[i.jsx("div",{className:"w-1.5 h-1.5 rounded-full bg-blue-400 animate-pulse"}),i.jsx("span",{className:"text-[11px] font-semibold text-blue-400 uppercase tracking-wider",children:"Cisco Technology Partner · Select Developer"})]}),i.jsxs("h1",{className:"text-[clamp(28px,4vw,48px)] font-bold leading-[1.1] tracking-[-1px] mb-5 text-white",children:["Build any solution on top of"," ",i.jsx("span",{className:"bg-clip-text text-transparent",style:{backgroundImage:"linear-gradient(90deg, #60A5FA, #34D399)"},children:"Cisco Networking"})]}),i.jsx("p",{className:"text-lg text-[#94A3B8] mb-10 leading-relaxed max-w-[520px]",children:"While we review your request, here's what to expect from our process."}),i.jsx("div",{className:"space-y-4 mb-10",children:[{icon:gn,title:"Check your inbox",desc:"A confirmation email is on its way with details about your request."},{icon:tt,title:"AI + experts analyze your request",desc:"Our team will review your requirements and start drafting a solution proposal."},{icon:jn,title:"Receive a proposal within 24 hours",desc:"Clear deliverables, timeline, and transparent pricing â no surprises."},{icon:qt,title:"Schedule a call (optional)",desc:"We'll offer a quick call to align on requirements before building starts."}].map(({icon:e,title:t,desc:n},a)=>i.jsxs(M.div,{initial:{opacity:0,x:-12},animate:{opacity:1,x:0},transition:{duration:.4,delay:.2+a*.08}
9741,className:"flex items-start gap-4 rounded-[12px] p-4",style:{background:"rgba(15,15,40,0.6)",border:"1px solid rgba(255,255,255,0.06)"},children:[i.jsx("div",{className:"w-9 h-9 rounded-[10px] flex items-center justify-center shrink-0",style:{background:"rgba(59,130,246,0.12)",border:"1px solid rgba(59,130,246,0.2)"},children:i.jsx(e,{className:"h-4 w-4 text-blue-400"})}),i.jsxs("div",{children:[i.jsx("p",{className:"text-sm font-semibold text-white mb-0.5",children:t}),i.jsx("p",{className:"text-[13px] text-[#64748B] leading-relaxed",children:n})]})]},t))}),i.jsxs("div",{className:"rounded-[16px] p-5",style:{background:"rgba(10,10,30,0.6)",border:"1px solid rgba(255,255,255,0.06)"},children:[i.jsx("p",{className:"text-[11px] font-semibold uppercase tracking-[2px] text-[#475569] mb-3",children:"What we can build for you"}),i.jsx("div",{className:"grid grid-cols-2 sm:grid-cols-3 gap-2",children:[{icon:Pn,label:"Automation Scripts"},{icon:In,label:"Analytics Dashboards"},{icon:oe,label:"Compliance Tools"},{icon:Ma,label:"Custom Integrations"},{icon:tt,label:"Control UIs"},{icon:ut,label:"And much more"}].map(({icon:e,label:t})=>i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx(e,{className:"w-3.5 h-3.5 text-[#4ECDC4] shrink-0"}),i.jsx("span",{className:"text-[12px] text-[#94A3B8]",children:t})]},t))})]}),i.jsx("div",{className:"flex items-center gap-4 flex-wrap mt-8",children:[{alt:"Cisco Meraki Technology Partner",src:"/cisco-meraki-partner.webp"},{alt:"Cisco Select Developer",src:"/cisco-meraki-select-developer.webp"}].map(e=>i.jsx("a",{href:"https://marketplace.cisco.com/en-US/apps/502978/selentai",target:"_blank",rel:"noopener noreferrer",className:"rounded-xl flex items-center px-4 py-3",style:{background:"rgba(235,235,246,0.06)",border:"1px solid rgba(255,255,255,0.08)"},children:i.jsx("img",{alt:e.alt,src:e.src,className:"h-10 w-auto object-contain opacity-80"})},e.alt))})]}),i.jsx(M.div,{className:"lg:col-span-5 lg:sticky lg:top-24",initial:{opacity:0,x:24},animate:{opacity:1,x:0},transition:{duration:.7,delay:.2,ease:[.23,1,.32,1]},children:i.jsx("div",{className:"rounded-[20px] p-6 sm:p-8 shadow-2xl",style:{background:"linear-gradient(160deg, rgba(20,20,55,0.95) 0%, rgba(12,12,35,0.98) 100%)",border:"1px solid rgba(59,130,246,0.25)",boxShadow:"0 8px 48px rgba(31,31,255,0.18), inset 0 1px 0 rgba(255,255,255,0.05)"},children:i.jsxs(M.div,{initial:{opacity:0,scale:.95},animate:{opacity:1,scale:1},transition:{duration:.5,delay:.3},className:"text-center",children:[i.jsxs("div",{className:"relative w-20 h-20 mx-auto mb-6",children:[i.jsx("div",{className:"absolute inset-0 rounded-full animate-ping opacity-20",style:{background:"rgba(59,130,246,0.4)"}}),i.jsx("div",{className:"relative w-20 h-20 rounded-full flex items-center justify-center",style:{background:"rgba(59,130,246,0.12)",border:"1px solid rgba(59,130,246,0.3)"},children:i.jsx(ze,{className:"h-10 w-10 text-blue-400"})})]}),i.jsx("h2",{className:"text-[24px] font-bold text-white mb-2",children:"Request received!"}),i.jsxs("p",{className:"text-[#94A3B8] mb-8 leading-relaxed",children:["We'll analyze your project and get back to you within"," ",i.jsx("span",{className:"text-white font-medium",children:"24 hours"}),"."]}),i.jsxs("div",{className:"rounded-[14px] p-5 text-left mb-6",style:{background:"rgba(6,6,20,0.6)",border:"1px solid rgba(255,255,255,0.06)"},children:[i.jsx("p",{className:"text-[11px] font-semibold uppercase tracking-[2px] text-[#475569] mb-4",children:"What to expect"}),i.jsx("div",{className:"space-y-3",children:["Clear proposal with deliverables and timeline","Transparent, project-based pricing","Direct access to the codebase","No vendor lock-in â everything you own"].map((e,t)=>i.jsxs("div",{className:"flex items-center gap-3",children:[i.jsx("div",{className:"w-4 h-4 rounded-full flex items-center justify-center shrink-0",style:{background:"rgba(59,130,246,0.15)"},children:i.jsx(ze,{className:"h-2.5 w-2.5 text-blue-400"})}),i.jsx("span",{className:"text-[13px] text-[#94A3B8]",children:e})]},t))})]}),i.jsx("p",{className:"text-[11px] text-[#334155]",children:"No spam · No commitment · We respect your time"})]})})})]})})]}),i.jsx("footer",{style:{borderTop:"1px solid rgba(255,255,255,0.06)"},className:"py-8 mt-auto",children:i.jsx("div",{className:"max-w-7xl mx-auto px-6 lg:px-[44px]",children:i.jsxs("div",{className:"flex flex-col sm:flex-row justify-between items-center gap-4",children:[i.jsx("img",{alt:"Selent",src:"/logo_white.png",className:"h-8 w-auto object-contain"}),i.jsxs("p",{className:"text-sm text-[#475569]",children:["© ",new Date().getFullYear()," Selent. All rights reserved."]})]})})})]})]}),c9=["gmail.com","yahoo.com","hotmail.com","outlook.com","live.com","aol.com","icloud.com","mail.com","protonmail.com","zoho.com","yandex.com","gmx.com","fastmail.com","tutanota.com","hey.com","pm.me","msn.com","me.com","mac.com"],fA=e=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e),u9=e=>fA(e)?!c9.includes(e.toLowerCase().split("@")[1]):!1,Id="selent_meeting_popup_dismissed",d9=()=>{const[e,t]=T.useState(!1),[n,a]=T.useState({name:"",company:"",email:""}),[r,s]=T.useState({}),[o,l]=T.useState(!1),[c,u]=T.useState(!1);T.useEffect(()=>{if(sessionStorage.getItem(Id))return;const g=setTimeout(()=>t(!0),5e3);return()=>clearTimeout(g)},[]);const d=()=>{sessionStorage.setItem(Id,"1"),t(!1)},m=()=>{const g={};return n.name.trim()||(g.name="El nombre es requerido"),n.company.trim()||(g.company="La empresa es requerida"),n.email.trim()?fA(n.email)?u9(n.email)||(g.email="Por favor usa tu email corporativo"):g.email="Ingresa un email válido":g.email="El email es requerido",s(g),Object.keys(g).length===0},p=async g=>{g.preventDefault(),m()&&(l(!0),await fetch("/api/lead",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:n.name,company:n.company,email:n.email,country:"No especificado",source:"Popup - Contacto",landingUrl:window.location.href})}).catch(y=>console.error("Lead API error:",y)),l(!1),u(!0),setTimeout(()=>{sessionStorage.setItem(Id,"1"),t(!1)},2800))},f=(g,y)=>{a(w=>({...w,[g]:y})),r[g]&&s(w=>{const x={...w};return delete x[g],x})};return i.jsx(po,{children:e&&i.jsxs(i.Fragment,{children:[i.jsx(M.div,{initial:{opacity:0}
9741,animate:{opacity:1},exit:{opacity:0},transition:{duration:.25},className:"fixed inset-0 z-[100] bg-black/60 backdrop-blur-sm",onClick:d},"backdrop"),i.jsx(M.div,{initial:{opacity:0,scale:.93,y:24},animate:{opacity:1,scale:1,y:0},exit:{opacity:0,scale:.95,y:16},transition:{duration:.35,ease:[.23,1,.32,1]},className:"fixed inset-0 z-[101] flex items-center justify-center p-4 pointer-events-none",children:i.jsxs("div",{className:"relative w-full max-w-[420px] rounded-[20px] p-6 sm:p-8 pointer-events-auto",style:{background:"linear-gradient(160deg, rgba(20,20,55,0.98) 0%, rgba(10,10,28,0.99) 100%)",border:"1px solid rgba(59,130,246,0.3)",boxShadow:"0 24px 80px rgba(0,0,0,0.7), 0 0 0 1px rgba(59,130,246,0.1), inset 0 1px 0 rgba(255,255,255,0.05)"},children:[i.jsx("button",{onClick:d,"aria-label":"Cerrar",className:"absolute top-4 right-4 w-7 h-7 rounded-full flex items-center justify-center text-[#475569] hover:text-white hover:bg-white/10 transition-colors",children:i.jsx(v1,{className:"w-4 h-4"})}),c?i.jsxs(M.div,{initial:{opacity:0,scale:.95},animate:{opacity:1,scale:1},transition:{duration:.35},className:"text-center py-6",children:[i.jsx("div",{className:"w-14 h-14 rounded-full flex items-center justify-center mx-auto mb-4",style:{background:"rgba(59,130,246,0.12)",border:"1px solid rgba(59,130,246,0.3)"},children:i.jsx(ze,{className:"w-7 h-7 text-blue-400"})}),i.jsx("h3",{className:"text-xl font-bold text-white mb-2",children:"¡Listo!"}),i.jsx("p",{className:"text-sm text-[#94A3B8] leading-relaxed",children:"Recibimos tu solicitud. Nuestro equipo te contactará pronto para coordinar la reunión."})]}):i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:"flex items-center gap-2.5 mb-4",children:[i.jsx("div",{className:"w-9 h-9 rounded-[10px] flex items-center justify-center shrink-0",style:{background:"rgba(59,130,246,0.15)",border:"1px solid rgba(59,130,246,0.3)"},children:i.jsx(qt,{className:"w-4.5 h-4.5 text-blue-400",style:{width:18,height:18}})}),i.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-[2px] text-blue-400",children:"Sin compromiso"})]}),i.jsx("h2",{className:"text-[22px] font-bold text-white leading-tight mb-2",children:"¿Nos das 20 minutos?"}),i.jsx("p",{className:"text-sm text-[#64748B] mb-6 leading-relaxed",children:"Te invitamos a una reunión de 20 minutos donde te mostraremos, sin ningún tipo de compromiso, cómo nuestro equipo de agentes AI + expertos en Cisco Networking puede construir lo que necesites, en horas y exponencialmente más asequible que soluciones tradicionales."}),i.jsxs("form",{onSubmit:p,className:"flex flex-col gap-4",children:[i.jsxs("div",{children:[i.jsxs("label",{className:"block text-xs font-medium text-[#94A3B8] mb-1.5",children:["Nombre ",i.jsx("span",{className:"text-red-400",children:"*"})]}),i.jsx("input",{type:"text",value:n.name,onChange:g=>f("name",g.target.value),placeholder:"Ana GarcÃa",className:`w-full px-4 py-3 rounded-[8px] bg-[#060614] border text-white placeholder-[#475569] focus:outline-none transition-colors text-sm ${r.name?"border-red-400":"border-[#1E1E3A] focus:border-blue-500/50"}`}),r.name&&i.jsxs("p",{className:"mt-1 text-xs text-red-400 flex items-center gap-1",children:[i.jsx(ge,{className:"h-3 w-3"})," ",r.name]})]}),i.jsxs("div",{children:[i.jsxs("label",{className:"block text-xs font-medium text-[#94A3B8] mb-1.5",children:["Empresa ",i.jsx("span",{className:"text-red-400",children:"*"})]}),i.jsx("input",{type:"text",value:n.company,onChange:g=>f("company",g.target.value),placeholder:"Acme Corp",className:`w-full px-4 py-3 rounded-[8px] bg-[#060614] border text-white placeholder-[#475569] focus:outline-none transition-colors text-sm ${r.company?"border-red-400":"border-[#1E1E3A] focus:border-blue-500/50"}`}),r.company&&i.jsxs("p",{className:"mt-1 text-xs text-red-400 flex items-center gap-1",children:[i.jsx(ge,{className:"h-3 w-3"})," ",r.company]})]}),i.jsxs("div",{children:[i.jsxs("label",{className:"block text-xs font-medium text-[#94A3B8] mb-1.5",children:["Email corporativo ",i.jsx("span",{className:"text-red-400",children:"*"})]}),i.jsx("input",{type:"email",value:n.email,onChange:g=>f("email",g.target.value),placeholder:"[email protected]",className:`w-full px-4 py-3 rounded-[8px] bg-[#060614] border text-white placeholder-[#47
97415569] focus:outline-none transition-colors text-sm ${r.email?"border-red-400":"border-[#1E1E3A] focus:border-blue-500/50"}`}),r.email&&i.jsxs("p",{className:"mt-1 text-xs text-red-400 flex items-center gap-1",children:[i.jsx(ge,{className:"h-3 w-3"})," ",r.email]})]}),i.jsx("button",{type:"submit",disabled:o,className:"w-full py-3 rounded-[10px] font-semibold text-white text-[15px] flex items-center justify-center gap-2 transition-all disabled:opacity-60 disabled:cursor-not-allowed mt-1",style:{background:o?"#2563EB":"#3B82F6"},onMouseEnter:g=>{o||(g.currentTarget.style.background="#2563EB")},onMouseLeave:g=>{o||(g.currentTarget.style.background="#3B82F6")},children:o?i.jsxs(i.Fragment,{children:[i.jsx("div",{className:"w-4 h-4 border-2 border-white border-t-transparent rounded-full animate-spin"}),"Enviando..."]}):i.jsxs(i.Fragment,{children:[i.jsx(qt,{className:"w-4 h-4"}),"Agendar reunión"]})}),i.jsx("button",{type:"button",onClick:d,className:"text-xs text-[#475569] hover:text-[#94A3B8] transition-colors text-center",children:"No, gracias"})]})]})]})},"modal")]})})},Uy=["Argentina","Australia","Bolivia","Brasil","Canadá","Chile","Colombia","Costa Rica","Cuba","Ecuador","El Salvador","Francia","Alemania","Guatemala","Honduras","Italia","Japón","México","Nicaragua","Panamá","Paraguay","Perú","Portugal","Puerto Rico","República Dominicana","España","Reino Unido","Estados Unidos","Uruguay","Venezuela","Otro"],m9=["gmail.com","yahoo.com","hotmail.com","outlook.com","live.com","aol.com","icloud.com","mail.com","protonmail.com","zoho.com","yandex.com","gmx.com","fastmail.com","tutanota.com","hey.com","pm.me","msn.com","me.com","mac.com"],gA=e=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e),p9=e=>gA(e)?!m9.includes(e.toLowerCase().split("@")[1]):!1;function h9(){const e=new URLSearchParams(window.location.search);return{utmSource:e.get("utm_source")||void 0,utmMedium:e.get("utm_medium")||void 0,utmCampaign:e.get("utm_campaign")||void 0,utmTerm:e.get("utm_term")||void 0,utmContent:e.get("utm_content")||void 0,gclid:e.get("gclid")||void 0}}const f9=({value:e,onChange:t,error:n})=>{const[a,r]=T.useState(!1),[s,o]=T.useState(""),l=T.useRef(null),c=T.useMemo(()=>{if(!s)return Uy;const u=s.toLowerCase();return Uy.filter(d=>d.toLowerCase().includes(u))},[s]);return T.useEffect(()=>{const u=d=>{l.current&&!l.current.contains(d.target)&&r(!1)};return document.addEventListener("mousedown",u),()=>document.removeEventListener("mousedown",u)},[]),i.jsxs("div",{ref:l,className:"relative",children:[i.jsxs("label",{className:"block text-sm font-medium text-[#94A3B8] mb-1.5",children:["PaÃs ",i.jsx("span",{className:"text-red-400",children:"*"})]}),i.jsxs("button",{type:"button",onClick:()=>r(!a),className:`w-full px-4 py-3 rounded-[8px] bg-[#060614] border text-left flex items-center justify-between transition-colors ${n?"border-red-400":"border-[#1E1E3A] focus:border-blue-500/50"}`,children:[i.jsx("span",{className:e?"text-white":"text-[#475569]",children:e||"Selecciona tu paÃs"}),i.jsx(Hc,{className:`h-4 w-4 text-[#475569] transition-transform ${a?"rotate-180":""}`})]}),a&&i.jsxs("div",{className:"absolute z-50 mt-1 w-full rounded-[10px] shadow-xl max-h-60 overflow-hidden",style:{background:"#0D0D20",border:"1px solid #1E1E3A"},children:[i.jsx("div",{className:"p-2 border-b border-[#1E1E3A]",children:i.jsxs("div",{className:"relative",children:[i.jsx(at,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-[#475569]"}),i.jsx("input",{type:"text",value:s,onChange:u=>o(u.target.value),placeholder:"Buscar paÃs...",className:"w-full pl-9 pr-3 py-2 bg-[#060614] border border-[#1E1E3A] rounded-[6px] text-sm text-white placeholder-[#475569] focus:outline-none focus:border-blue-500/50",autoFocus:!0})]})}),i.jsx("div",{className:"overflow-y-auto max-h-44",children:c.length===0?i.jsx("div",{className:"px-4 py-3 text-sm text-[#475569]",children:"Sin resultados"}):c.map(u=>i.jsx("button",{type:"button",onClick:()=>{t(u),r(!1),o("")},className:`w-full text-left px-4 py-2.5 text-sm transition-colors hover:bg-[#0D0D30] ${u===e?"text-blue-400 bg-[#0D0D30]":"text-[#94A3B8]"}`,children:u},u))})]}),n&&i.jsxs("p",{className:"mt-1 text-sm text-red-400 flex items-center gap-1",children:[i.jsx(ge,{className:"h-3.5 w-3.5"})," ",n]})]})},Ii=({icon:e,iconColor:t,title:n,desc:a,tags:r,delay:s})=>i.jsxs(M.div,{initial:{opacity:0,y:16},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.4,delay:s},className:"flex flex-col gap-3 rounded-[16px] p-5",style:{background:"linear-gradient(160deg, rgba(20,20,50,0.9) 0%, rgba(12,12,35,0.95) 100%)",border:"1px solid rgba(34,211,238,0.12)",boxShadow:"0 4px 24px rgba(0,0,0,0.3), inset 0 1px 0 rgba(255,255,255,0.04)"},children:[i.jsx(e,{className:`w-5 h-5 ${t}`}),i.jsx("h3",{className:"text-[15px] font-semibold text-white",children:n}),i.jsx("p",{className:"text-[13px] leading-[1.5] text-[#94A3B8]",children:a}),i.jsx("div",{className:"flex gap-1.5 flex-wrap mt-1",children:r.map(o=>i.jsx("span",{className:`rounded-full px-2 py-[3px] text-[10px] font-medium font-mono ${o.color==="teal"?"bg-[#4ECDC415] text-[#4ECDC4]":"bg-[#7C8DB515] text-[#7C8DB5]"}`,children:o.label},o.label))})]}),g9=({num:e,icon:t,title:n,desc:a,delay:r})=>i.jsxs(M.div,{initial:{opacity:0,y:16},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.4,delay:r},className:"flex items-start gap-4",children:[i.jsxs("div",{className:"flex flex-col items-center gap-1 shrink-0",children:[i.jsx("div",{className:"w-9 h-9 rounded-[10px] flex items-center justify-center",style:{background:"rgba(59,130,246,0.12)",border:"1px solid rgba(59,130,246,0.25)"},children:i.jsx(t,{className:"w-4 h-4 text-blue-400"})}),i.jsx("span",{className:"text-[10px] font-mono font-bold text-blue-400/60",children:e})]}),i.jsxs("div",{className:"pt-0.5",children:[i.jsx("p",{className:"text-[14px] font-semibold text-white mb-0.5",children:n}),i.jsx("p",{className:"text-[13px] leading-[1.5] text-[#64748B]",children:a})]})]}),x9=()=>{const[e,t]=T.useState({name:"",company:"",email:"",country:"",description:""}),[n,a]=T.useState({}),[r,s]=T.useState(!1),[o,l]=T.useState(!1),c=()=>{const p={};return e.name.trim()||(p.name="El nombre completo es requerido"),e.company.trim()||(p.company="La empresa es requerida"),e.description.trim()||(p.description="Por favor describe qué necesitas"),e.email.trim()?gA(e.email)?p9(e.email)||(p.email="Por favor usa tu email corporativo"):p.email="Ingresa una dirección de email válida":p.email="El email es requerido",e.country||(p.country="Por favor selecciona un paÃs"),a(p),Object.keys(p).length===0},u=async p=>{if(p.preventDefault(),!c())return;s(!0);const f=h9();await fetch("/api/lead",{method:"POST",headers:{"Content-Type":"application/json"}
9741,body:JSON.stringify({...e,source:"Contact Page ES",landingUrl:window.location.href,...f})}).catch(g=>console.error("Lead API error:",g)),Dn("contacto-landing"),s(!1),l(!0),setTimeout(()=>{window.location.href="/contacto-gracias"},2500)},d=(p,f)=>{t(g=>({...g,[p]:f})),n[p]&&a(g=>{const y={...g};return delete y[p],y})},m=i.jsx("div",{className:"rounded-[20px] p-6 sm:p-8 shadow-2xl",style:{background:"linear-gradient(160deg, rgba(20,20,55,0.95) 0%, rgba(12,12,35,0.98) 100%)",border:"1px solid rgba(59,130,246,0.25)",boxShadow:"0 8px 48px rgba(31,31,255,0.18), inset 0 1px 0 rgba(255,255,255,0.05)"},children:o?i.jsxs(M.div,{initial:{opacity:0,scale:.95},animate:{opacity:1,scale:1},transition:{duration:.4},className:"text-center py-8",children:[i.jsx("div",{className:"w-16 h-16 rounded-full flex items-center justify-center mx-auto mb-4",style:{background:"rgba(59,130,246,0.1)",border:"1px solid rgba(59,130,246,0.3)"},children:i.jsx(ze,{className:"h-8 w-8 text-blue-400"})}),i.jsx("h3",{className:"text-xl font-bold text-white mb-2",children:"¡Solicitud recibida!"}),i.jsx("p",{className:"text-[#94A3B8]",children:"Redirigiendo para confirmar tu envÃo..."}),i.jsx("div",{className:"mt-4 flex justify-center",children:i.jsx("div",{className:"w-5 h-5 border-2 border-blue-400 border-t-transparent rounded-full animate-spin"})})]}):i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[i.jsx(Gc,{className:"h-4 w-4 text-blue-400"}),i.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-[2px] text-blue-400",children:"Habla con un Experto"})]}),i.jsx("h2",{className:"text-[22px] font-bold text-white mb-1",children:"Describe tu proyecto"}),i.jsx("p",{className:"text-sm text-[#64748B] mb-6 leading-relaxed",children:"Cuéntanos qué necesitas en Cisco Networking. Nuestro equipo revisará tu solicitud y te responderá en 24 horas con una propuesta."}),i.jsxs("form",{onSubmit:u,className:"flex flex-col gap-4",children:[i.jsxs("div",{children:[i.jsxs("label",{className:"block text-sm font-medium text-[#94A3B8] mb-1.5",children:["¿Qué necesitas? ",i.jsx("span",{className:"text-red-400",children:"*"})]}),i.jsx("textarea",{value:e.description,onChange:p=>d("description",p.target.value),placeholder:"p. ej., Necesito un dashboard que muestre el uso de ancho de banda en tiempo real en todos mis dispositivos MX, con alertas cuando algún enlace supere el 80% de utilización...",rows:4,className:`w-full px-4 py-3 rounded-[8px] bg-[#060614] border text-white placeholder-[#475569] focus:outline-none transition-colors resize-none text-sm leading-relaxed ${n.description?"border-red-400":"border-[#1E1E3A] focus:border-blue-500/50"}`}),n.description&&i.jsxs("p",{className:"mt-1 text-sm text-red-400 flex items-center gap-1",children:[i.jsx(ge,{className:"h-3.5 w-3.5"})," ",n.description]})]}),i.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[i.jsxs("div",{children:[i.jsxs("label",{className:"block text-sm font-medium text-[#94A3B8] mb-1.5",children:["Nombre completo ",i.jsx("span",{className:"text-red-400",children:"*"})]}),i.jsx("input",{type:"text",value:e.name,onChange:p=>d("name",p.target.value),placeholder:"Ana GarcÃa",className:`w-full px-4 py-3 rounded-[8px] bg-[#060614] border text-white placeholder-[#475569] focus:outline-none transition-colors text-sm ${n.name?"border-red-400":"border-[#1E1E3A] focus:border-blue-500/50"}`}),n.name&&i.jsxs("p",{className:"mt-1 text-xs text-red-400 flex items-center gap-1",children:[i.jsx(ge,{className:"h-3 w-3"})," ",n.name]})]}),i.jsxs("div",{children:[i.jsxs("label",{className:"block text-sm font-medium text-[#94A3B8] mb-1.5",children:["Empresa ",i.jsx("span",{className:"text-red-400",children:"*"})]}),i.jsx("input",{type:"text",value:e.company,onChange:p=>d("company",p.target.value),placeholder:"Acme Corp",className:`w-full px-4 py-3 rounded-[8px] bg-[#060614] border text-white placeholder-[#475569] focus:outline-none transition-colors text-sm ${n.company?"border-red-400":"border-[#1E1E3A] focus:border-blue-500/50"}`}),n.company&&i.jsxs("p",{className:"mt-1 text-xs text-red-400 flex items-center gap-1",children:[i.jsx(ge,{className:"h-3 w-3"})," ",n.company]})]})]}),i.jsxs("div",{children:[i.jsxs("label",{className:"block text-sm font-medium text-[#94A3B8] mb-1.5",children:["Email corporativo ",i.jsx("span",{className:"text-red-400",children:"*"})]}),i.jsx("input",{type:"email",value:e.email,onChange:p=>d("email",p.target.value),placeholder:"[email protected]",className:`w-full px-4 py-3 rounded-[8px] bg-[#060614] border text-white placeholder-[#47
97415569] focus:outline-none transition-colors text-sm ${n.email?"border-red-400":"border-[#1E1E3A] focus:border-blue-500/50"}`}),n.email&&i.jsxs("p",{className:"mt-1 text-sm text-red-400 flex items-center gap-1",children:[i.jsx(ge,{className:"h-3.5 w-3.5"})," ",n.email]})]}),i.jsx(f9,{value:e.country,onChange:p=>d("country",p),error:n.country}),i.jsx("button",{type:"submit",disabled:r,className:"w-full py-3.5 rounded-[10px] font-semibold text-white text-[15px] flex items-center justify-center gap-2 transition-all disabled:opacity-60 disabled:cursor-not-allowed mt-1",style:{background:r?"#2563EB":"#3B82F6"},onMouseEnter:p=>{r||(p.currentTarget.style.background="#2563EB")},onMouseLeave:p=>{r||(p.currentTarget.style.background="#3B82F6")},children:r?i.jsxs(i.Fragment,{children:[i.jsx("div",{className:"w-4 h-4 border-2 border-white border-t-transparent rounded-full animate-spin"}),"Enviando..."]}):i.jsxs(i.Fragment,{children:["Enviar solicitud de proyecto",i.jsx(ut,{className:"h-4 w-4"})]})}),i.jsx("p",{className:"text-[11px] text-[#475569] text-center",children:"Revisaremos tu solicitud y te responderemos en 24 horas."})]})]})});return i.jsxs(i.Fragment,{children:[i.jsx(d9,{}),i.jsx(it,{title:"Desarrolla cualquier solución sobre Cisco Networking | Selent",description:"Agentes de IA y expertos en Cisco Networking crean soluciones personalizadas para tu industria: automatización, dashboards de analÃtica, herramientas de cumplimiento, integraciones y monitoreo.",keywords:"cisco networking, cisco meraki, automatización de red, solución personalizada, dashboard analÃtico, herramientas de cumplimiento, integración, monitoreo, Selent",url:"https://selent.ai/contacto"}),i.jsxs("div",{className:"min-h-screen bg-dark-base text-white font-sans",children:[i.jsx("header",{className:"w-full sticky top-0 z-50 px-6 lg:px-[44px] py-4",style:{background:"rgba(10,10,11,0.92)",backdropFilter:"blur(20px)",borderBottom:"1px solid rgba(255,255,255,0.06)"},children:i.jsx("div",{className:"max-w-7xl mx-auto flex items-center",children:i.jsx("img",{alt:"Selent",src:"/logo_white.png",className:"h-9 w-auto object-contain"})})}),i.jsxs("section",{className:"relative overflow-hidden",children:[i.jsx("div",{className:"absolute inset-0 z-0",style:{background:"radial-gradient(ellipse 70% 60% at 0% 0%, rgba(37,99,235,0.12) 0%, transparent 65%), radial-gradient(ellipse 50% 50% at 100% 100%, rgba(59,130,246,0.06) 0%, transparent 60%)"}}),i.jsx("div",{className:"relative z-10 max-w-7xl mx-auto px-6 lg:px-[44px] py-14 lg:py-20",children:i.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-12 items-start",children:[i.jsxs(M.div,{className:"lg:col-span-7",initial:{opacity:0,x:-24},animate:{opacity:1,x:0},transition:{duration:.7,ease:[.23,1,.32,1]},children:[i.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 rounded-full mb-6",style:{background:"rgba(59,130,246,0.1)",border:"1px solid rgba(59,130,246,0.2)"},children:[i.jsx("div",{className:"w-1.5 h-1.5 rounded-full bg-blue-400 animate-pulse"}),i.jsx("span",{className:"text-[11px] font-semibold text-blue-400 uppercase tracking-wider",children:"Cisco Technology Partner · Select Developer"})]}),i.jsxs("h1",{className:"text-[clamp(32px,4.5vw,56px)] font-bold leading-[1.05] tracking-[-1.5px] mb-5 text-white",children:["Desarrolla cualquier solución sobre"," ",i.jsx("span",{className:"bg-clip-text text-transparent",style:{backgroundImage:"linear-gradient(90deg, #60A5FA, #34D399)"},children:"Cisco Networking"})]}),i.jsx("p",{className:"text-lg text-[#94A3B8] mb-8 leading-relaxed max-w-[560px]",children:"Agentes de IA y expertos en Cisco Networking crean soluciones personalizadas para tu industria â scripts de automatización, dashboards de analÃtica, interfaces de control, herramientas de cumplimiento, integraciones y monitoreo."}),i.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3 mb-10",children:[{icon:Pn,color:"text-[#4ECDC4]",title:"Scripts de Automatización",tags:["Aprovisionamiento","Cambios masivos"]},{icon:In,color:"text-[#7C8DB5]",title:"Dashboards de AnalÃtica",tags:["Tiempo real","Métricas personalizadas"]},{icon:mn,color:"text-[#4ECDC4]",title:"Interfaces de Control",tags:["Por roles","Simplificadas"]},{icon:gi,color:"text-[#7C8DB5]",title:"Herramientas de Cumplimiento",tags:["PCI DSS","Reportes de auditorÃa"]},{icon:Ma,color:"text-[#4ECDC4]",title:"Integraciones Personalizadas",tags:["ServiceNow","Splunk"]},{icon:fi,color:"text-[#7C8DB5]",title:"Monitoreo y Alertas",tags:["Con IA","24/7"]}].map(({icon:p,color:f,title:g,tags:y},w)=>i.jsxs(M.div,{initial:{opacity:0,y:12}
9741,animate:{opacity:1,y:0},transition:{duration:.4,delay:.1+w*.05},className:"flex items-center gap-3 rounded-[12px] px-4 py-3",style:{background:"rgba(15,15,40,0.6)",border:"1px solid rgba(255,255,255,0.06)"},children:[i.jsx(p,{className:`w-4 h-4 ${f} shrink-0`}),i.jsxs("div",{className:"min-w-0",children:[i.jsx("p",{className:"text-[13px] font-semibold text-white leading-tight",children:g}),i.jsx("p",{className:"text-[11px] text-[#64748B]",children:y.join(" · ")})]})]},g))}),i.jsxs("div",{className:"rounded-[16px] p-5 mb-8",style:{background:"rgba(10,10,30,0.6)",border:"1px solid rgba(255,255,255,0.06)"},children:[i.jsx("p",{className:"text-[11px] font-semibold uppercase tracking-[2px] text-[#475569] mb-4",children:"Cómo funciona"}),i.jsx("div",{className:"flex flex-col gap-5",children:[{num:"01",icon:ic,title:"EnvÃa tu solicitud",desc:"Describe tu necesidad en lenguaje simple."},{num:"02",icon:tt,title:"IA + expertos preparan una propuesta",desc:"Entregables claros, plazos y precios."},{num:"03",icon:jn,title:"Tú apruebas",desc:"Acceso completo al código fuente, siempre."},{num:"04",icon:oe,title:"Construimos y entregamos",desc:"Desplegado, probado y listo para producción."}].map(p=>i.jsx(g9,{...p,delay:0},p.num))})]}),i.jsx("div",{className:"flex items-center gap-4 flex-wrap",children:[{alt:"Cisco Meraki Technology Partner",src:"/cisco-meraki-partner.webp"},{alt:"Cisco Select Developer",src:"/cisco-meraki-select-developer.webp"}].map(p=>i.jsx("a",{href:"https://marketplace.cisco.com/en-US/apps/502978/selentai",target:"_blank",rel:"noopener noreferrer",className:"rounded-xl flex items-center px-4 py-3",style:{background:"rgba(235,235,246,0.06)",border:"1px solid rgba(255,255,255,0.08)"},children:i.jsx("img",{alt:p.alt,src:p.src,className:"h-10 w-auto object-contain opacity-80"})},p.alt))})]}),i.jsx(M.div,{className:"lg:col-span-5 lg:sticky lg:top-24",initial:{opacity:0,x:24},animate:{opacity:1,x:0},transition:{duration:.7,delay:.2,ease:[.23,1,.32,1]},children:m})]})})]}),i.jsx("div",{className:"h-[1px] w-full",style:{background:"linear-gradient(90deg, transparent 0%, #3B82F6 50%, transparent 100%)"}}),i.jsx("section",{className:"py-16 lg:py-20",children:i.jsxs("div",{className:"max-w-7xl mx-auto px-6 lg:px-[44px]",children:[i.jsxs(M.div,{initial:{opacity:0,y:16},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.5},className:"text-center mb-10",children:[i.jsxs("div",{className:"inline-flex items-center gap-2 rounded-full px-[14px] py-[6px] mb-4",style:{background:"#141416",border:"1px solid #262629"},children:[i.jsx(mn,{className:"w-3.5 h-3.5 text-blue-400"}),i.jsx("span",{className:"text-[11px] font-semibold text-blue-400 tracking-[2px]",children:"SOLUCIONES"})]}),i.jsx("h2",{className:"text-[28px] sm:text-[36px] font-bold text-white mb-3",children:"Lo que necesites en Cisco Networking, lo construimos"}),i.jsx("p",{className:"text-[#94A3B8] max-w-[540px] mx-auto",children:"Desde automatización sencilla hasta plataformas personalizadas complejas â cada solución se construye para tu entorno especÃfico."})]}),i.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:[i.jsx(Ii,{icon:Pn,iconColor:"text-[#4ECDC4]",title:"Scripts de Automatización",desc:"Automatiza tareas repetitivas: aprovisionamiento masivo, plantillas de configuración, cambios programados y flujos basados en API.",tags:[{label:"Python",color:"teal"},{label:"Cisco API",color:"teal"},{label:"Webhooks",color:"muted"}],delay:0}),i.jsx(Ii,{icon:In,iconColor:"text-[#7C8DB5]",title:"Dashboards de AnalÃtica",desc:"Dashboards personalizados con métricas en tiempo real, análisis de tráfico, salud de dispositivos y tendencias históricas.",tags:[{label:"Tiempo real",color:"teal"},{label:"Visualización",color:"muted"},{label:"Alertas",color:"muted"}],delay:.05}),i.jsx(Ii,{icon:mn,iconColor:"text-[#4ECDC4]",title:"Interfaces de Control",desc:"Interfaces diseñadas para operadores de red: vistas simplificadas, acciones masivas y acceso basado en roles.",tags:[{label:"React",color:"teal"},{label:"Por roles",color:"muted"},{label:"Personalizado",color:"muted"}],delay:.1}),i.jsx(Ii,{icon:gi,iconColor:"text-[#7C8DB5]",title:"Herramientas de Cumplimiento",desc:"Verificaciones automáticas de cumplimiento, trazabilidad de auditorÃas, aplicación de polÃticas e informes regulatorios.",tags:[{label:"PC
9741I DSS",color:"teal"},{label:"AuditorÃa",color:"muted"},{label:"PolÃticas",color:"muted"}],delay:.15}),i.jsx(Ii,{icon:Ma,iconColor:"text-[#4ECDC4]",title:"Integraciones Personalizadas",desc:"Conecta Cisco Networking con tus herramientas existentes: ITSM, plataformas de monitoreo, proveedores de identidad y más.",tags:[{label:"Cisco API",color:"teal"},{label:"ServiceNow",color:"muted"},{label:"Splunk",color:"muted"}],delay:.2}),i.jsx(Ii,{icon:fi,iconColor:"text-[#7C8DB5]",title:"Monitoreo y Alertas",desc:"Monitoreo proactivo con alertas inteligentes, detección de anomalÃas y respuesta automática a incidentes.",tags:[{label:"Con IA",color:"teal"},{label:"Proactivo",color:"muted"},{label:"24/7",color:"muted"}],delay:.25})]})]})}),i.jsx("div",{className:"h-[1px] w-full",style:{background:"linear-gradient(90deg, transparent 0%, #3B82F6 50%, transparent 100%)"}}),i.jsx("section",{className:"py-16 lg:py-20",style:{background:"rgba(6,6,16,0.8)"},children:i.jsx("div",{className:"max-w-4xl mx-auto px-6 lg:px-[44px]",children:i.jsxs(M.blockquote,{initial:{opacity:0,y:16},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.6},className:"relative",children:[i.jsx("div",{className:"absolute left-0 top-0 bottom-0 w-[3px] rounded-full",style:{background:"linear-gradient(180deg, #3B82F6, #34D399)"}}),i.jsxs("div",{className:"pl-8",children:[i.jsx("p",{className:"text-xl sm:text-2xl lg:text-[28px] font-light text-[#CBD5E1] leading-[1.5] italic mb-6",children:"âDescribimos lo que necesitábamos â un dashboard de ancho de banda en tiempo real con alertas â y Selent lo tenÃa construido y desplegado en menos de una semana. Se adaptó perfectamente a nuestro entorno Meraki. Ninguna herramienta genérica hubiera logrado eso.â"}),i.jsxs("footer",{className:"flex items-center gap-4",children:[i.jsx("div",{className:"w-10 h-10 rounded-full flex items-center justify-center shrink-0",style:{background:"rgba(59,130,246,0.15)",border:"1px solid rgba(59,130,246,0.25)"},children:i.jsx("span",{className:"text-sm font-bold text-blue-400",children:"MR"})}),i.jsxs("div",{children:[i.jsx("p",{className:"text-sm font-semibold text-white",children:"Michael R."}),i.jsx("p",{className:"text-sm text-[#64748B]",children:"VP de Infraestructura TI · Empresa de salud, Estados Unidos"})]})]})]})]})})}),i.jsx("footer",{style:{borderTop:"1px solid rgba(255,255,255,0.06)"},className:"py-8",children:i.jsx("div",{className:"max-w-7xl mx-auto px-6 lg:px-[44px]",children:i.jsxs("div",{className:"flex flex-col sm:flex-row justify-between items-center gap-4",children:[i.jsx("img",{alt:"Selent",src:"/logo_white.png",className:"h-8 w-auto object-contain"}),i.jsxs("p",{className:"text-sm text-[#475569]",children:["© ",new Date().getFullYear()," Selent. Todos los derechos reservados."]})]})})})]})]})},y9=()=>i.jsxs(i.Fragment,{children:[i.jsx(it,{title:"Solicitud recibida â Te contactaremos pronto | Selent",description:"Recibimos tu solicitud de proyecto. Nuestro equipo la revisará y te responderá en 24 horas con una propuesta.",keywords:"cisco networking, cisco meraki, automatización de red, Selent",url:"https://selent.ai/contacto-gracias",noindex:!0}),i.jsxs("div",{className:"min-h-screen bg-dark-base text-white font-sans",children:[i.jsx("header",{className:"w-full sticky top-0 z-50 px-6 lg:px-[44px] py-4",style:{background:"rgba(10,10,11,0.92)",backdropFilter:"blur(20px)",borderBottom:"1px solid rgba(255,255,255,0.06)"},children:i.jsx("div",{className:"max-w-7xl mx-auto flex items-center",children:i.jsx("img",{alt:"Selent",src:"/logo_white.png",className:"h-9 w-auto object-contain"})})}),i.jsxs("section",{className:"relative overflow-hidden",children:[i.jsx("div",{className:"absolute inset-0 z-0",style:{background:"radial-gradient(ellipse 70% 60% at 0% 0%, rgba(37,99,235,0.12) 0%, transparent 65%), radial-gradient(ellipse 50% 50% at 100% 100%, rgba(59,130,246,0.06) 0%, transparent 60%)"}}),i.jsx("div",{className:"relative z-10 max-w-7xl mx-auto px-6 lg:px-[44px] py-14 lg:py-20",children:i.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-12 gap-12 items-start",children:[i.jsxs(M.div,{className:"lg:col-span-7",initial:{opacity:0,x:-24}
9741,animate:{opacity:1,x:0},transition:{duration:.7,ease:[.23,1,.32,1]},children:[i.jsxs("div",{className:"inline-flex items-center gap-2 px-3 py-1.5 rounded-full mb-6",style:{background:"rgba(59,130,246,0.1)",border:"1px solid rgba(59,130,246,0.2)"},children:[i.jsx("div",{className:"w-1.5 h-1.5 rounded-full bg-blue-400 animate-pulse"}),i.jsx("span",{className:"text-[11px] font-semibold text-blue-400 uppercase tracking-wider",children:"Cisco Technology Partner · Select Developer"})]}),i.jsxs("h1",{className:"text-[clamp(28px,4vw,48px)] font-bold leading-[1.1] tracking-[-1px] mb-5 text-white",children:["Desarrolla cualquier solución sobre"," ",i.jsx("span",{className:"bg-clip-text text-transparent",style:{backgroundImage:"linear-gradient(90deg, #60A5FA, #34D399)"},children:"Cisco Networking"})]}),i.jsx("p",{className:"text-lg text-[#94A3B8] mb-10 leading-relaxed max-w-[520px]",children:"Mientras revisamos tu solicitud, esto es lo que puedes esperar de nuestro proceso."}),i.jsx("div",{className:"space-y-4 mb-10",children:[{icon:gn,title:"Revisa tu bandeja de entrada",desc:"Un email de confirmación está en camino con los detalles de tu solicitud."},{icon:tt,title:"IA + expertos analizan tu solicitud",desc:"Nuestro equipo revisará tus requerimientos y comenzará a preparar una propuesta de solución."},{icon:jn,title:"Recibe una propuesta en 24 horas",desc:"Entregables claros, plazos y precios transparentes â sin sorpresas."},{icon:qt,title:"Agenda una llamada (opcional)",desc:"Ofrecemos una llamada rápida para alinear los requerimientos antes de comenzar."}].map(({icon:e,title:t,desc:n},a)=>i.jsxs(M.div,{initial:{opacity:0,x:-12},animate:{opacity:1,x:0},transition:{duration:.4,delay:.2+a*.08}
9741,className:"flex items-start gap-4 rounded-[12px] p-4",style:{background:"rgba(15,15,40,0.6)",border:"1px solid rgba(255,255,255,0.06)"},children:[i.jsx("div",{className:"w-9 h-9 rounded-[10px] flex items-center justify-center shrink-0",style:{background:"rgba(59,130,246,0.12)",border:"1px solid rgba(59,130,246,0.2)"},children:i.jsx(e,{className:"h-4 w-4 text-blue-400"})}),i.jsxs("div",{children:[i.jsx("p",{className:"text-sm font-semibold text-white mb-0.5",children:t}),i.jsx("p",{className:"text-[13px] text-[#64748B] leading-relaxed",children:n})]})]},t))}),i.jsxs("div",{className:"rounded-[16px] p-5",style:{background:"rgba(10,10,30,0.6)",border:"1px solid rgba(255,255,255,0.06)"},children:[i.jsx("p",{className:"text-[11px] font-semibold uppercase tracking-[2px] text-[#475569] mb-3",children:"Qué podemos construir para ti"}),i.jsx("div",{className:"grid grid-cols-2 sm:grid-cols-3 gap-2",children:[{icon:Pn,label:"Scripts de Automatización"},{icon:In,label:"Dashboards de AnalÃtica"},{icon:oe,label:"Herramientas de Cumplimiento"},{icon:Ma,label:"Integraciones Personalizadas"},{icon:tt,label:"Interfaces de Control"},{icon:ut,label:"Y mucho más"}].map(({icon:e,label:t})=>i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx(e,{className:"w-3.5 h-3.5 text-[#4ECDC4] shrink-0"}),i.jsx("span",{className:"text-[12px] text-[#94A3B8]",children:t})]},t))})]}),i.jsx("div",{className:"flex items-center gap-4 flex-wrap mt-8",children:[{alt:"Cisco Meraki Technology Partner",src:"/cisco-meraki-partner.webp"},{alt:"Cisco Select Developer",src:"/cisco-meraki-select-developer.webp"}].map(e=>i.jsx("a",{href:"https://marketplace.cisco.com/en-US/apps/502978/selentai",target:"_blank",rel:"noopener noreferrer",className:"rounded-xl flex items-center px-4 py-3",style:{background:"rgba(235,235,246,0.06)",border:"1px solid rgba(255,255,255,0.08)"},children:i.jsx("img",{alt:e.alt,src:e.src,className:"h-10 w-auto object-contain opacity-80"})},e.alt))})]}),i.jsx(M.div,{className:"lg:col-span-5 lg:sticky lg:top-24",initial:{opacity:0,x:24},animate:{opacity:1,x:0},transition:{duration:.7,delay:.2,ease:[.23,1,.32,1]},children:i.jsx("div",{className:"rounded-[20px] p-6 sm:p-8 shadow-2xl",style:{background:"linear-gradient(160deg, rgba(20,20,55,0.95) 0%, rgba(12,12,35,0.98) 100%)",border:"1px solid rgba(59,130,246,0.25)",boxShadow:"0 8px 48px rgba(31,31,255,0.18), inset 0 1px 0 rgba(255,255,255,0.05)"},children:i.jsxs(M.div,{initial:{opacity:0,scale:.95},animate:{opacity:1,scale:1},transition:{duration:.5,delay:.3},className:"text-center",children:[i.jsxs("div",{className:"relative w-20 h-20 mx-auto mb-6",children:[i.jsx("div",{className:"absolute inset-0 rounded-full animate-ping opacity-20",style:{background:"rgba(59,130,246,0.4)"}}),i.jsx("div",{className:"relative w-20 h-20 rounded-full flex items-center justify-center",style:{background:"rgba(59,130,246,0.12)",border:"1px solid rgba(59,130,246,0.3)"},children:i.jsx(ze,{className:"h-10 w-10 text-blue-400"})})]}),i.jsx("h2",{className:"text-[24px] font-bold text-white mb-2",children:"¡Solicitud recibida!"}),i.jsxs("p",{className:"text-[#94A3B8] mb-8 leading-relaxed",children:["Analizaremos tu proyecto y te responderemos en"," ",i.jsx("span",{className:"text-white font-medium",children:"24 horas"}),"."]}),i.jsxs("div",{className:"rounded-[14px] p-5 text-left mb-6",style:{background:"rgba(6,6,20,0.6)",border:"1px solid rgba(255,255,255,0.06)"},children:[i.jsx("p",{className:"text-[11px] font-semibold uppercase tracking-[2px] text-[#475569] mb-4",children:"Qué esperar"}),i.jsx("div",{className:"space-y-3",children:["Propuesta clara con entregables y plazos","Precios transparentes por proyecto","Acceso directo al código fuente","Sin dependencia del proveedor â todo es tuyo"].map((e,t)=>i.jsxs("div",{className:"flex items-center gap-3",children:[i.jsx("div",{className:"w-4 h-4 rounded-full flex items-center justify-center shrink-0",style:{background:"rgba(59,130,246,0.15)"},children:i.jsx(ze,{className:"h-2.5 w-2.5 text-blue-400"})}),i.jsx("span",{className:"text-[13px] text-[#94A3B8]",children:e})]},t))})]}),i.jsx("p",{className:"text-[11px] text-[#334155]",children:"Sin spam · Sin compromiso · Respetamos tu tiempo"})]})})})]})})]}),i.jsx("footer",{style:{borderTop:"1px solid rgba(255,255,255,0.06)"},className:"py-8 mt-auto",children:i.jsx("div",{className:"max-w-7xl mx-auto px-6 lg:px-[44px]",children:i.jsxs("div",{className:"flex flex-col sm:flex-row justify-between items-center gap-4",children:[i.jsx("img",{alt:"Selent",src:"/logo_white.png",className:"h-8 w-auto object-contain"}),i.jsxs("p",{className:"text-sm text-[#475569]",children:["© ",new Date().getFullYear()," Selent. Todos los derechos reservados."]})]})})})]})]}),b9=({className:e=""})=>i.jsxs("div",{className:`relative w-[1280px] h-[720px] bg-dark-base ${e}`,style:{overflow:"hidden"},children:[i.jsx(pe,{opacity:.03}),i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-accent-cyan/10 via-dark-base to-accent-purple/10"}),i.jsxs("div",{className:"relative z-10 flex flex-col items-center justify-center h-full px-16 py-16 text-center",children:[i.jsxs(M.div,{initial:{opacity:0,scale:.8}
9741,animate:{opacity:1,scale:1},transition:{duration:.8},className:"mb-12",children:[i.jsx("img",{src:"/logo_white.png",alt:"Selent",className:"h-20 mb-6"}),i.jsx("div",{className:"w-24 h-0.5 bg-gradient-to-r from-accent-cyan to-accent-purple mx-auto"})]}),i.jsxs(M.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.8,delay:.2},className:"max-w-4xl mb-12",children:[i.jsxs("h2",{className:"text-4xl lg:text-5xl font-bold text-white mb-8 leading-tight",children:["Gestión Inteligente con IA para",i.jsx("span",{className:"block text-transparent bg-clip-text bg-gradient-to-r from-accent-cyan to-accent-purple mt-3",children:"Redes Cisco Meraki"})]}),i.jsx("p",{className:"text-lg text-gray-300 leading-relaxed max-w-3xl mx-auto",children:"Diseñado especÃficamente para infraestructura Cisco Meraki. Automatiza respaldos, analiza cambios y busca configuraciones en dispositivos MX, MS, MR y MV."})]}),i.jsxs(M.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.8,delay:.4},className:"flex items-center justify-center gap-12",children:[i.jsx("a",{href:"https://marketplace.cisco.com/en-US/apps/502978/selentai",target:"_blank",rel:"noopener noreferrer",children:i.jsx("img",{src:"/cisco-meraki-partner.webp",alt:"Cisco Meraki Technology Partner",className:"h-12 opacity-90 hover:opacity-100 transition-opacity"})}),i.jsx("a",{href:"https://marketplace.cisco.com/en-US/apps/502978/selentai",target:"_blank",rel:"noopener noreferrer",children:i.jsx("img",{src:"/cisco-meraki-select-developer.webp",alt:"Cisco Select Developer",className:"h-12 opacity-90 hover:opacity-100 transition-opacity"})})]}),i.jsx(M.div,{initial:{opacity:0}
9741,animate:{opacity:1},transition:{duration:.8,delay:.6},className:"absolute bottom-6 text-gray-500 text-xs",children:i.jsxs("p",{children:["Confidencial y Propietario ⢠",new Date().getFullYear()]})})]}),i.jsx("div",{className:"absolute top-16 right-16 w-48 h-48 bg-gradient-to-br from-accent-cyan/10 to-accent-purple/10 rounded-full blur-3xl"}),i.jsx("div",{className:"absolute bottom-16 left-16 w-32 h-32 bg-gradient-to-br from-accent-purple/10 to-accent-cyan/10 rounded-full blur-2xl"})]}),v9=({className:e=""})=>{const t=[{icon:za,title:"Ineficiencia Operativa",description:"Procesos manuales de respaldo a escala",impact:"83 horas por 500 dispositivos",color:"from-red-500 to-orange-500"},{icon:p1,title:"Opciones Limitadas de Recuperación",description:"Sin capacidad de restauración granular",impact:"500+ horas para restaurar",color:"from-orange-500 to-yellow-500"},{icon:Zn,title:"Brecha en AuditorÃas",description:"Sin control de versiones ni seguimiento de cambios",impact:"Cero visibilidad de compliance",color:"from-yellow-500 to-red-500"}];return i.jsxs("div",{className:`relative w-[1280px] h-[720px] bg-dark-base ${e}`,style:{overflow:"hidden"},children:[i.jsx(pe,{opacity:.02}),i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-red-900/10 via-dark-base to-orange-900/10"}),i.jsxs("div",{className:"relative z-10 h-full flex flex-col justify-center px-16 py-16",children:[i.jsxs(M.div,{initial:{opacity:0,y:-20},animate:{opacity:1,y:0},transition:{duration:.6},className:"mb-12 text-center",children:[i.jsx("h1",{className:"text-3xl font-bold text-white mb-3",children:"Limitaciones Actuales"}),i.jsx("p",{className:"text-base text-gray-300 max-w-2xl mx-auto",children:"Gestión de configuraciones Cisco Meraki a escala empresarial"})]}),i.jsx("div",{className:"grid grid-cols-3 gap-10 max-w-6xl mx-auto",children:t.map((n,a)=>i.jsxs(M.div,{initial:{opacity:0,y:30},animate:{opacity:1,y:0},transition:{duration:.6,delay:a*.15},className:"relative group",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-red-500/10 to-orange-500/10 rounded-xl blur-2xl opacity-0 group-hover:opacity-100 transition-all duration-300"}),i.jsxs("div",{className:"relative glass-card p-6 h-full flex flex-col border-red-500/20 hover:border-red-500/40 transition-all duration-300 hover:transform hover:scale-105",children:[i.jsx("div",{className:"mb-4",children:i.jsx("div",{className:`w-12 h-12 rounded-xl bg-gradient-to-br ${n.color} p-0.5`,children:i.jsx("div",{className:"w-full h-full bg-dark-base rounded-xl flex items-center justify-center",children:i.jsx(n.icon,{className:"w-6 h-6 text-white"})})})}),i.jsx("h3",{className:"text-base font-semibold text-white mb-2",children:n.title}),i.jsx("p",{className:"text-sm text-gray-400 mb-4 flex-grow",children:n.description}),i.jsx("div",{className:"pt-3 border-t border-red-500/20",children:i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("div",{className:"w-2 h-2 bg-gradient-to-r from-red-500 to-orange-500 rounded-full animate-pulse"}),i.jsx("span",{className:"text-sm font-bold text-transparent bg-clip-text bg-gradient-to-r from-red-400 to-orange-400",children:n.impact})]})})]})]},a))})]}),i.jsx("div",{className:"absolute bottom-8 right-12 text-gray-500",children:"2"})]})},xA=({className:e=""})=>{const t=T.useRef(null),n=T.useRef(0),a=T.useRef([]),r=T.useRef(0);return T.useEffect(()=>{const s=t.current;if(!s)return;const o=s.getContext("2d");if(!o)return;const l=()=>{s.width=s.offsetWidth*window.devicePixelRatio,s.height=s.offsetHeight*window.devicePixelRatio,o.scale(window.devicePixelRatio,window.devicePixelRatio)};l(),window.addEventListener("resize",l);const c=()=>{const f=s.offsetWidth,g=s.offsetHeight,y=f/2,w=g/2;return{mx:{x:y,y:w-g*.25,label:"MX",type:"firewall"},ms1:{x:y-f*.3,y:w,label:"MS",type:"switch"},ms2:{x:y+f*.3,y:w,label:"MS",type:"switch"},mr1:{x:y-f*.2,y:w+g*.25,label:"MR",type:"ap"},mr2:{x:y,y:w+g*.25,label:"MR",type:"ap"},mr3:{x:y+f*.2,y:w+g*.25,label:"MR",type:"ap"}}},u=(f,g,y)=>{const{x:w,y:x,label:b,type:v}=g,N=30+y*10,I=f.createRadialGradient(w,x,0,w,x,N);if(v==="firewall"?I.addColorStop(0,"rgba(78, 205, 196, 0.2)"):v==="switch"?I.addColorStop(0,"rgba(124, 141, 181, 0.2)"):v==="ap"&&I.addColorStop(0,"rgba(245, 184, 0, 0.2)"),I.addColorStop(1,"transparent"),f.fillStyle=I,f.fillRect(w-N,x-N,N*2,N*2),f.save(),f.translate(w,x),v==="firewall"){f.beginPath();const C=30;for(let R=0;R<6;R++){const O=Math.PI/3*R,H=Math.cos(O)*C,P=Math.sin(O)*C;R===0?f.moveTo(H,P):f.lineTo(H,P)}f.closePath(),f.fillStyle="#1A1A1D",f.fill(),f.strokeStyle="#4ECDC4",f.lineWidth=2,f.stroke(),f.fillStyle="#4ECDC4",f.font="bold 14px monospace",f.textAlign="center",f.textBaseline="middle",f.fillText("MX",0,0)}
9741else if(v==="switch"){f.fillStyle="#1A1A1D",f.fillRect(-50/2,-30/2,50,30),f.strokeStyle="#7C8DB5",f.lineWidth=2,f.strokeRect(-50/2,-30/2,50,30);for(let O=0;O<4;O++){const H=-15+O*10;f.fillStyle="#4ECDC4",f.fillRect(H,-5,6,10)}f.fillStyle="#7C8DB5",f.font="bold 12px monospace",f.textAlign="center",f.textBaseline="middle",f.fillText("MS",0,-30/2-10)}else if(v==="ap"){f.beginPath(),f.arc(0,0,20,0,Math.PI*2),f.fillStyle="#1A1A1D",f.fill(),f.strokeStyle="#F5B800",f.lineWidth=2,f.stroke();for(let C=1;C<=3;C++)f.beginPath(),f.arc(0,0,20+C*8,-Math.PI/4,Math.PI/4),f.strokeStyle=`rgba(245, 184, 0, ${.3-C*.08})`,f.lineWidth=1,f.stroke();f.fillStyle="#F5B800",f.font="bold 12px monospace",f.textAlign="center",f.textBaseline="middle",f.fillText("MR",0,0)}f.restore(),f.fillStyle="#666",f.font="10px monospace",f.textAlign="center",f.textBaseline="top",f.fillText(b,w,x+35)},d=(f,g)=>{[{from:g.mx,to:g.ms1},{from:g.mx,to:g.ms2},{from:g.ms1,to:g.mr1},{from:g.ms1,to:g.mr2},{from:g.ms2,to:g.mr2},{from:g.ms2,to:g.mr3}].forEach(w=>{f.beginPath(),f.moveTo(w.from.x,w.from.y),f.lineTo(w.to.x,w.to.y);const x=f.createLinearGradient(w.from.x,w.from.y,w.to.x,w.to.y);x.addColorStop(0,"rgba(78, 205, 196, 0.3)"),x.addColorStop(.5,"rgba(124, 141, 181, 0.3)"),x.addColorStop(1,"rgba(245, 184, 0, 0.3)"),f.strokeStyle=x,f.lineWidth=2,f.setLineDash([5,5]),f.stroke(),f.setLineDash([])})},m=(f,g)=>{a.current.forEach(y=>{const w=g[y.source],x=g[y.target];if(!w||!x)return;const b=w.x+(x.x-w.x)*y.progress,v=w.y+(x.y-w.y)*y.progress,N=f.createRadialGradient(b,v,0,b,v,15);N.addColorStop(0,y.color),N.addColorStop(1,"transparent"),f.fillStyle=N,f.fillRect(b-15,v-15,30,30),f.beginPath(),f.arc(b,v,3,0,Math.PI*2),f.fillStyle=y.color,f.fill()})},p=()=>{o.clearRect(0,0,s.offsetWidth,s.offsetHeight),r.current+=16;const f=Math.sin(r.current*.002)*.5+.5,g=c();if(Math.random()<.03){const y=[{from:"mx",to:"ms1"},{from:"mx",to:"ms2"},{from:"ms1",to:"mr1"},{from:"ms1",to:"mr2"},{from:"ms2",to:"mr2"},{from:"ms2",to:"mr3"}],w=y[Math.floor(Math.random()*y.length)],x=Math.random()>.5,b=x?w.to:w.from,v=x?w.from:w.to,N=["#4ECDC4","#7C8DB5","#F5B800"];a.current.push({id:Date.now(),source:b,target:v,progress:0,color:N[Math.floor(Math.random()*N.length)]})}a.current=a.current.filter(y=>(y.progress+=.015,y.progress<=1)),d(o,g),m(o,g),Object.values(g).forEach(y=>{u(o,y,f)}),n.current=requestAnimationFrame(p)};return p(),()=>{window.removeEventListener("resize",l),cancelAnimationFrame(n.current)}},[]),i.jsxs(M.div,{initial:{opacity:0,scale:.9},animate:{opacity:1,scale:1},transition:{duration:1,ease:[.23,1,.32,1]},className:`relative ${e}`,children:[i.jsx("canvas",{ref:t,className:"w-full h-full",style:{maxWidth:"600px"}}),i.jsx("div",{className:"absolute inset-0 pointer-events-none",children:i.jsx("div",{className:"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-3/4 h-3/4 bg-gradient-to-r from-accent-cyan/5 via-accent-purple/5 to-accent-red/5 rounded-full blur-3xl"})}),i.jsxs("div",{className:"absolute top-4 left-1/2 -translate-x-1/2 flex items-center gap-2 glass-card px-3 py-1.5 text-xs",children:[i.jsx("div",{className:"w-2 h-2 bg-accent-cyan rounded-full animate-pulse"}),i.jsx("span",{className:"text-gray-400",children:"Cisco Meraki Infrastructure"})]})]})},w9=({className:e=""})=>i.jsxs("div",{className:`relative w-[1280px] h-[720px] bg-dark-base ${e}`,style:{overflow:"hidden"},children:[i.jsx(pe,{opacity:.03}),i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-accent-cyan/10 via-dark-base to-accent-purple/10"}),i.jsx("div",{className:"relative z-10 h-full px-16 py-16",children:i.jsxs("div",{className:"grid grid-cols-2 gap-16 h-full",children:[i.jsx("div",{className:"flex items-center",children:i.jsxs(M.div,{initial:{opacity:0,x:-50},animate:{opacity:1,x:0},transition:{duration:.8},className:"w-full",children:[i.jsxs("div",{className:"mb-8",children:[i.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 glass-card rounded-full mb-6 border-accent-cyan/30",children:[i.jsx(tt,{className:"w-4 h-4 text-accent-cyan"}),i.jsx("span",{className:"text-sm text-accent-cyan font-medium",children:"Partner Tecnológico de Cisco"})]}),i.jsxs("h1",{className:"text-4xl lg:text-5xl font-bold text-white mb-6 leading-tight",children:["Selent Suite",i.jsx("span",{className:"block text-transparent bg-clip-text bg-gradient-to-r from-accent-cyan to-accent-purple text-5xl lg:text-6xl mt-3",children:"Plataforma Empresarial"})]}),i.jsx("p",{className:"text-base text-gray-300 leading-relaxed max-w-lg",children:"Plataforma de gestión de configuraciones y compliance diseñada para implementaciones Cisco Meraki a escala."})]}),i.jsxs("div",{className:"space-y-5",children:[i.jsxs(M.div,{initial:{opacity:0,x:-20}
9741,animate:{opacity:1,x:0},transition:{duration:.6,delay:.3},className:"flex items-center gap-4 group",children:[i.jsx("div",{className:"w-12 h-12 rounded-xl bg-gradient-to-br from-accent-cyan to-accent-purple p-0.5 group-hover:scale-110 transition-transform",children:i.jsx("div",{className:"w-full h-full bg-dark-base rounded-xl flex items-center justify-center",children:i.jsx(Un,{className:"w-6 h-6 text-accent-cyan"})})}),i.jsx("span",{className:"text-base text-white",children:"Respaldo y Restauración Automatizados"})]}),i.jsxs(M.div,{initial:{opacity:0,x:-20},animate:{opacity:1,x:0},transition:{duration:.6,delay:.4},className:"flex items-center gap-4 group",children:[i.jsx("div",{className:"w-12 h-12 rounded-xl bg-gradient-to-br from-accent-purple to-accent-cyan p-0.5 group-hover:scale-110 transition-transform",children:i.jsx("div",{className:"w-full h-full bg-dark-base rounded-xl flex items-center justify-center",children:i.jsx(qe,{className:"w-6 h-6 text-accent-purple"})})}),i.jsx("span",{className:"text-base text-white",children:"Automatización de Compliance"})]}),i.jsxs(M.div,{initial:{opacity:0,x:-20},animate:{opacity:1,x:0},transition:{duration:.6,delay:.5},className:"flex items-center gap-4 group",children:[i.jsx("div",{className:"w-12 h-12 rounded-xl bg-gradient-to-br from-accent-cyan to-accent-purple p-0.5 group-hover:scale-110 transition-transform",children:i.jsx("div",{className:"w-full h-full bg-dark-base rounded-xl flex items-center justify-center",children:i.jsx(xn,{className:"w-6 h-6 text-accent-cyan"})})}),i.jsx("span",{className:"text-base text-white",children:"Inteligencia Artificial"})]})]})]})}),i.jsx("div",{className:"flex items-center justify-center h-full",children:i.jsx(M.div,{initial:{opacity:0,scale:.9},animate:{opacity:1,scale:1},transition:{duration:1,delay:.2},className:"w-full h-[520px]",children:i.jsx(xA,{className:"w-full h-full"})})})]})}),i.jsx("div",{className:"absolute bottom-8 right-12 text-gray-500",children:"3"})]}),k9=({className:e=""})=>{const t=[{icon:ta,title:"Respaldo de Configuraciones",description:"Snapshots diarios automatizados, control de versiones",benefits:["Retención 360 dÃas","Restauración granular"],gradient:"from-blue-500 to-cyan-500"},{icon:ea,title:"Inteligencia de Cambios",description:"Comparación de configuraciones con IA",benefits:["Búsqueda semántica","Análisis de diferencias"],gradient:"from-purple-500 to-pink-500"},{icon:at,title:"Motor de Compliance",description:"Validación de estándares de industria",benefits:["PCI/HIPAA/SOC2","PolÃticas personalizadas"],gradient:"from-cyan-500 to-teal-500"},{icon:qe,title:"Soporte Multi-Organización",description:"Gestión para MSPs y empresas",benefits:["Control centralizado","Acceso por roles"],gradient:"from-green-500 to-emerald-500"}];return i.jsxs("div",{className:`relative w-[1280px] h-[720px] bg-dark-base ${e}`,style:{overflow:"hidden"},children:[i.jsx(pe,{opacity:.02}),i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-accent-cyan/5 via-dark-base to-accent-purple/5"}),i.jsxs("div",{className:"relative z-10 h-full flex flex-col px-16 py-12",children:[i.jsxs(M.div,{initial:{opacity:0,y:-20},animate:{opacity:1,y:0},transition:{duration:.6},className:"mb-8 text-center",children:[i.jsx("h1",{className:"text-3xl font-bold text-white mb-3",children:"Capacidades Principales"}),i.jsx("p",{className:"text-base text-gray-300 max-w-2xl mx-auto",children:"Gestión integral de configuraciones para Cisco Meraki"})]}),i.jsx("div",{className:"grid grid-cols-2 gap-6 max-w-5xl mx-auto",children:t.map((n,a)=>i.jsxs(M.div,{initial:{opacity:0,scale:.95},animate:{opacity:1,scale:1},transition:{duration:.6,delay:a*.15},className:"group relative",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-accent-cyan/10 to-accent-purple/10 rounded-xl blur-2xl opacity-0 group-hover:opacity-100 transition-all duration-300"}),i.jsxs("div",{className:"relative glass-card p-5 h-full flex flex-col hover:border-accent-cyan/40 transition-all duration-300 hover:transform hover:scale-105",children:[i.jsx("div",{className:`w-10 h-10 rounded-lg bg-gradient-to-br ${n.gradient} p-0.5 mb-3`,children:i.jsx("div",{className:"w-full h-full bg-dark-base rounded-lg flex items-center justify-center",children:i.jsx(n.icon,{className:"w-5 h-5 text-white"})})}),i.jsx("h3",{className:"text-base font-semibold text-white mb-2",children:n.title}),i.jsx("p",{className:"text-xs text-gray-400 mb-3 leading-relaxed",children:n.description}),i.jsx("div",{className:"space-y-1.5 pt-3 border-t border-gray-800 mt-auto",children:n.benefits.map((r,s)=>i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("div",{className:"w-1.5 h-1.5 bg-gradient-to-r from-accent-cyan to-accent-purple roun
9741ded-full flex-shrink-0"}),i.jsx("span",{className:"text-xs text-gray-300",children:r})]},s))})]})]},a))})]}),i.jsx("div",{className:"absolute bottom-8 right-12 text-gray-500",children:"4"})]})},A9=({className:e=""})=>{const t=[{icon:h1,title:"Conexión vÃa API",description:"Autenticación segura con tu dashboard Cisco Meraki",details:"Acceso de solo lectura garantiza cero riesgo para tu infraestructura"},{icon:ta,title:"Respaldo Automatizado",description:"Captura y almacenamiento continuo de configuraciones",details:"Snapshots diarios con versionado histórico"},{icon:oe,title:"Valor Operacional",description:"Acceso inmediato a capacidades avanzadas",details:"Restauración instantánea, análisis con IA y monitoreo de compliance"}];return i.jsxs("div",{className:`relative w-[1280px] h-[720px] bg-dark-base ${e}`,style:{overflow:"hidden"},children:[i.jsx(pe,{opacity:.02}),i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-accent-cyan/5 via-dark-base to-accent-purple/5"}),i.jsxs("div",{className:"relative z-10 h-full flex flex-col px-16 py-12",children:[i.jsxs(M.div,{initial:{opacity:0,y:-20},animate:{opacity:1,y:0},transition:{duration:.6},className:"mb-10 text-center",children:[i.jsx("h1",{className:"text-2xl font-bold text-white mb-2",children:"Proceso de Implementación"}),i.jsx("p",{className:"text-sm text-gray-300",children:"Despliegue simple en tres pasos con valor inmediato"})]}),i.jsx("div",{className:"flex-1 flex items-center justify-center",children:i.jsx("div",{className:"flex items-center gap-8 max-w-5xl",children:t.map((n,a)=>i.jsxs(Et.Fragment,{children:[i.jsx(M.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.5,delay:a*.2},className:"flex-1",children:i.jsxs("div",{className:"glass-card p-6 h-full hover:border-accent-cyan/40 transition-all",children:[i.jsxs("div",{className:"flex items-center justify-between mb-4",children:[i.jsx("div",{className:"w-8 h-8 rounded-full bg-gradient-to-br from-accent-cyan to-accent-purple flex items-center justify-center",children:i.jsx("span",{className:"text-white font-bold text-sm",children:a+1})}),i.jsx(n.icon,{className:"w-6 h-6 text-accent-cyan"})]}),i.jsx("h3",{className:"text-base font-semibold text-white mb-2",children:n.title}),i.jsx("p",{className:"text-sm text-gray-300 mb-3",children:n.description}),i.jsx("p",{className:"text-xs text-gray-400",children:n.details})]})}),a<t.length-1&&i.jsx(M.div,{initial:{opacity:0,scale:0},animate:{opacity:1,scale:1},transition:{duration:.5,delay:a*.2+.3},children:i.jsx(ut,{className:"w-6 h-6 text-accent-cyan"})})]},a))})}),i.jsx(M.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.6,delay:.8},className:"mt-8 text-center",children:i.jsx("div",{className:"inline-flex items-center gap-4 px-5 py-2.5 glass-card rounded-full border-accent-cyan/30",children:i.jsx("span",{className:"text-sm text-accent-cyan font-medium",children:"Despliegue en menos de 5 minutos ⢠Sin servicios profesionales requeridos"})})})]}),i.jsx("div",{className:"absolute bottom-8 right-12 text-gray-500",children:"5"})]})},C9=({className:e=""})=>{const t=[{value:"83hrs â 6min",label:"Config Básica",description:"Tiempo para 500 dispositivos",icon:xn,color:"text-accent-cyan"},{value:"500hrs â 12min",label:"Config Compleja",description:"Tiempo de despliegue empresarial",icon:xh,color:"text-green-400"},{value:"1,500hrs â 16min",label:"Restauración Total",description:"Recuperación completa de red",icon:qe,color:"text-accent-purple"},{value:"93%",label:"Ahorro de Tiempo",description:"Ganancia promedio en eficiencia operacional",icon:za,color:"text-blue-400"}],n=[{category:"Impacto Operacional",items:["Despliegue automatizado de configuraciones","Control de versiones para todos los cambios"]},{category:"Reducción de Riesgos",items:["Rollback sin tiempo de inactividad","Validación continua de compliance"]},{category:"Eficiencia de Costos",items:["Reducción del 70% en costos operativos","Eliminación de procesos manuales de respaldo"]}];return i.jsxs("div",{className:`relative w-[1280px] h-[720px] bg-dark-base ${e}`,style:{overflow:"hidden"},children:[i.jsx(pe,{opacity:.02}),i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-green-900/10 via-dark-base to-blue-900/10"}),i.jsxs("div",{className:"relative z-10 h-full flex flex-col px-16 py-12",children:[i.jsxs(M.div,{initial:{opacity:0,y:-20}
9741,animate:{opacity:1,y:0},transition:{duration:.6},className:"mb-6 text-center",children:[i.jsx("h1",{className:"text-2xl font-bold text-white mb-2",children:"Tiempo de Retorno"}),i.jsx("p",{className:"text-sm text-gray-300",children:"Manual vs. Selent: comparación para 500 dispositivos"})]}),i.jsx("div",{className:"grid grid-cols-4 gap-4 mb-6",children:t.map((a,r)=>i.jsx(M.div,{initial:{opacity:0,scale:.9},animate:{opacity:1,scale:1},transition:{duration:.5,delay:r*.1},className:"text-center",children:i.jsxs("div",{className:"glass-card p-3 h-full border-accent-cyan/20 hover:border-accent-cyan/40 transition-all",children:[i.jsx(a.icon,{className:`w-6 h-6 ${a.color} mx-auto mb-2`}),i.jsx("div",{className:`text-xl font-bold ${a.color} mb-1`,children:a.value}),i.jsx("div",{className:"text-sm font-semibold text-white mb-1",children:a.label}),i.jsx("p",{className:"text-xs text-gray-400 line-clamp-2",children:a.description})]})},r))}),i.jsx("div",{className:"flex-1 grid grid-cols-3 gap-4",children:n.map((a,r)=>i.jsx(M.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.5,delay:.4+r*.1},children:i.jsxs("div",{className:"glass-card p-4 h-full",children:[i.jsx("h3",{className:"text-sm font-semibold text-accent-cyan mb-3",children:a.category}),i.jsx("ul",{className:"space-y-2",children:a.items.slice(0,2).map((s,o)=>i.jsxs("li",{className:"flex items-start gap-2",children:[i.jsx("div",{className:"w-4 h-4 rounded-full bg-gradient-to-br from-accent-cyan to-accent-purple p-0.5 flex-shrink-0 mt-0.5",children:i.jsx("div",{className:"w-full h-full bg-dark-base rounded-full flex items-center justify-center",children:i.jsx("div",{className:"w-1.5 h-1.5 bg-accent-cyan rounded-full"})})}),i.jsx("span",{className:"text-xs text-gray-300",children:s})]},o))})]})},r))})]}),i.jsx("div",{className:"absolute bottom-8 right-12 text-gray-500",children:"6"})]})},E9=({className:e=""})=>i.jsxs("div",{className:`relative w-[1280px] h-[720px] bg-dark-base ${e}`,style:{overflow:"hidden"},children:[i.jsxs("div",{className:"absolute inset-0",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-accent-cyan/20 via-dark-base to-accent-purple/20 animate-gradient-shift"}),i.jsx(M.div,{animate:{x:[0,100,0],y:[0,-50,0]},transition:{duration:20,repeat:1/0,ease:"linear"},className:"absolute top-1/4 left-1/4 w-96 h-96 bg-accent-cyan/20 rounded-full blur-3xl"}),i.jsx(M.div,{animate:{x:[0,-100,0],y:[0,50,0]},transition:{duration:15,repeat:1/0,ease:"linear"},className:"absolute bottom-1/4 right-1/4 w-96 h-96 bg-accent-purple/20 rounded-full blur-3xl"})]}),i.jsx("div",{className:"relative z-10 h-full flex items-center justify-center",children:i.jsxs(M.div,{initial:{opacity:0,scale:.5},animate:{opacity:1,scale:1},transition:{duration:1.2,ease:[.23,1,.32,1]},children:[i.jsx(M.h1,{className:"text-8xl lg:text-9xl font-bold",animate:{backgroundPosition:["0% 50%","100% 50%","0% 50%"]},transition:{duration:5,repeat:1/0,ease:"linear"},style:{backgroundImage:"linear-gradient(90deg, #4ECDC4, #7C8DB5, #4ECDC4)",backgroundSize:"200% 100%",WebkitBackgroundClip:"text",backgroundClip:"text",WebkitTextFillColor:"transparent",textShadow:"0 0 80px rgba(78, 205, 196, 0.5)"},children:"DEMO"}),i.jsx(M.div,{className:"absolute inset-0 -z-10",animate:{opacity:[.3,.6,.3],scale:[.9,1.1,.9]},transition:{duration:3,repeat:1/0,ease:"easeInOut"},children:i.jsx("div",{className:"w-full h-full bg-gradient-to-r from-accent-cyan/30 to-accent-purple/30 blur-3xl"})})]})}),i.jsx("div",{className:"absolute bottom-8 right-12 text-gray-500",children:"7"})]}),N9=({className:e=""})=>{const t=[{name:"Profesional",price:"$1.80",period:"/dispositivo/mes",description:"Capacidades principales de la plataforma",features:["Respaldos diarios automatizados","Retención de 180 dÃas","Sistema de control de versiones","SLA de soporte estándar"],icon:xn,gradient:"from-blue-500 to-cyan-500",popular:!1},{name:"Empresarial",price:"Personalizado",period:"precio por volumen",description:"Acceso completo a la plataforma",features:["Todas las funciones Profesionales","Análisis de cambios con IA","Automatización de compliance","Gerente de éxito dedicado","Acceso API y webhooks"],icon:ro,gradient:"from-
9741accent-cyan to-accent-purple",popular:!0},{name:"Complementos",price:"Variable",period:"según caso",description:"Potenciá tu implementación",features:["Soporte Multi-Cliente","Opciones white-label para MSPs","Agente de Compliance con IA"],icon:x1,gradient:"from-purple-500 to-pink-500",popular:!1}];return i.jsxs("div",{className:`relative w-[1280px] h-[720px] bg-dark-base ${e}`,style:{overflow:"hidden"},children:[i.jsx(pe,{opacity:.02}),i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-accent-cyan/5 via-dark-base to-accent-purple/5"}),i.jsxs("div",{className:"relative z-10 h-full flex flex-col px-16 py-12",children:[i.jsxs(M.div,{initial:{opacity:0,y:-20},animate:{opacity:1,y:0},transition:{duration:.6},className:"mb-8 text-center",children:[i.jsx("h1",{className:"text-2xl font-bold text-white mb-2",children:"Opciones de Inversión"}),i.jsx("p",{className:"text-sm text-gray-300",children:"Precios flexibles alineados con tu escala de despliegue"})]}),i.jsx("div",{className:"flex-1 grid grid-cols-3 gap-4 overflow-hidden",children:t.map((n,a)=>i.jsx(M.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.5,delay:a*.1},className:"relative",children:i.jsxs("div",{className:`glass-card p-5 h-full flex flex-col ${n.popular?"border-accent-cyan/50 shadow-2xl shadow-accent-cyan/10":"border-gray-800/50"}`,children:[i.jsx("div",{className:`w-10 h-10 rounded-lg bg-gradient-to-br ${n.gradient} p-0.5 mb-3`,children:i.jsx("div",{className:"w-full h-full bg-dark-base rounded-lg flex items-center justify-center",children:i.jsx(n.icon,{className:"w-5 h-5 text-white"})})}),i.jsx("h3",{className:"text-lg font-bold text-white mb-1",children:n.name}),i.jsx("p",{className:"text-xs text-gray-400 mb-3",children:n.description}),i.jsxs("div",{className:"mb-4",children:[i.jsx("span",{className:"text-xl font-bold text-white",children:n.price}),i.jsx("span",{className:"text-xs text-gray-400",children:n.period})]}),i.jsx("ul",{className:"space-y-2 flex-1",children:n.features.map((r,s)=>i.jsxs("li",{className:"flex items-start gap-2",children:[i.jsx("div",{className:"w-4 h-4 rounded-full bg-gradient-to-br from-green-500 to-emerald-500 p-0.5 flex-shrink-0 mt-0.5",children:i.jsx("div",{className:"w-full h-full bg-dark-base rounded-full flex items-center justify-center",children:i.jsx(ze,{className:"w-2.5 h-2.5 text-green-400"})})}),i.jsx("span",{className:"text-xs text-gray-300",children:r})]},s))}),i.jsx(M.button,{whileHover:{scale:1.02},whileTap:{scale:.98},className:`mt-4 w-full py-2.5 rounded-lg font-semibold text-sm transition-all ${n.popular?"bg-gradient-to-r from-accent-cyan to-accent-purple text-white hover:shadow-lg hover:shadow-accent-cyan/25":"glass-card text-gray-300 hover:text-white hover:border-accent-cyan/50"}`,children:n.name==="Empresarial"?"Contactar Ventas":"Iniciar Prueba Gratuita"})]})},a))})]}),i.jsx("div",{className:"absolute bottom-8 right-12 text-gray-500",children:"8"})]})},T9=({className:e=""})=>i.jsxs("div",{className:`relative w-[1280px] h-[720px] bg-dark-base ${e}`,style:{overflow:"hidden"},children:[i.jsx(pe,{opacity:.03}),i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-accent-cyan/10 via-dark-base to-accent-purple/10"}),i.jsx("div",{className:"absolute top-16 right-16 w-64 h-64 bg-gradient-to-br from-accent-cyan/10 to-accent-purple/10 rounded-full blur-3xl animate-pulse"}),i.jsx("div",{className:"absolute bottom-16 left-16 w-48 h-48 bg-gradient-to-br from-accent-purple/10 to-accent-cyan/10 rounded-full blur-2xl animate-pulse"}),i.jsxs("div",{className:"relative z-10 h-full flex flex-col items-center justify-center px-16 py-12 text-center",children:[i.jsxs(M.div,{initial:{opacity:0,y:30},animate:{opacity:1,y:0},transition:{duration:.8},className:"max-w-5xl",children:[i.jsx("div",{className:"flex items-center justify-center mb-3",children:i.jsx("img",{src:"/logo_white.png",alt:"Selent",className:"h-12 opacity-90"})}),i.jsxs("h1",{className:"text-2xl font-bold text-white mb-3",children:["Próximos Pasos para",i.jsx("span",{className:"block text-transparent bg-clip-text bg-gradient-to-r from-accent-cyan to-accent-purple",children:"Modernizar tu Red"})]}),i.jsx("p",{className:"text-sm text-gray-300 mb-6 leading-relaxed max-w-2xl mx-auto",children:"Descubrà cómo Selent puede simplificar la gestión de tu infraestructura Cisco Meraki con automatización inteligente."}),i.jsxs("div",{className:"flex items-center justify-center gap-3 mb-8",children:[i.jsxs(M.button,{whileHover:{scale:1.05},whileTap:{scale:.95},className:"group px-6 py-3 bg-gradient-to-r from-accent-cyan to-accent-purple roun
9741ded-lg text-white font-semibold text-sm hover:shadow-xl hover:shadow-accent-cyan/25 transition-all flex items-center gap-2",children:["Iniciar Prueba Gratuita",i.jsx(ut,{className:"w-4 h-4 group-hover:translate-x-1 transition-transform"})]}),i.jsxs(M.button,{whileHover:{scale:1.05},whileTap:{scale:.95},className:"group px-6 py-3 glass-card rounded-lg text-gray-300 hover:text-white font-semibold text-sm hover:border-accent-cyan/50 transition-all flex items-center gap-2",children:[i.jsx(qt,{className:"w-4 h-4"}),"Agendar Demo"]})]}),i.jsxs("div",{className:"grid grid-cols-2 gap-4 max-w-md mx-auto mb-8",children:[i.jsxs(M.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.6,delay:.3},className:"glass-card p-4 text-center hover:border-accent-purple/40 transition-all",children:[i.jsx(gn,{className:"w-6 h-6 text-accent-purple mx-auto mb-2"}),i.jsx("div",{className:"text-sm font-semibold text-white",children:"Contacto"}),i.jsx("div",{className:"text-xs text-gray-400",children:"[email protected]"})]}),i.jsxs(M.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.6,delay:.4},className:"glass-card p-4 text-center hover:border-accent-cyan/40 transition-all",children:[i.jsx(Hs,{className:"w-6 h-6 text-accent-cyan mx-auto mb-2"}),i.jsx("div",{className:"text-sm font-semibold text-white",children:"Sitio Web"}),i.jsx("div",{className:"text-xs text-gray-400",children:"selent.ai"})]})]})]}),i.jsx(M.div,{initial:{opacity:0}
9741,animate:{opacity:1},transition:{duration:.8,delay:.7},className:"absolute bottom-8 left-16 right-16 text-center text-gray-500 text-xs",children:i.jsxs("p",{children:["© ",new Date().getFullYear()," Selent. Todos los derechos reservados."]})})]}),i.jsx("div",{className:"absolute bottom-8 right-12 text-gray-500",children:"9"})]}),yA=({slideNumber:e})=>i.jsxs("div",{className:"deck-slide relative overflow-hidden bg-gradient-to-br from-[#0B1117] via-[#0F1823] to-[#0B1117]",children:[i.jsx("div",{className:"absolute inset-0 overflow-hidden pointer-events-none",children:i.jsxs("svg",{className:"absolute inset-0 w-full h-full opacity-[0.03]",children:[i.jsx("defs",{children:i.jsxs("pattern",{id:"cable-pattern-title",x:"0",y:"0",width:"200",height:"200",patternUnits:"userSpaceOnUse",children:[i.jsx("path",{d:"M 20 20 Q 80 20, 80 60 T 20 100",stroke:"#4ECDC4",strokeWidth:"2",fill:"none",opacity:"0.5"}),i.jsx("circle",{cx:"20",cy:"20",r:"4",fill:"#4ECDC4",opacity:"0.3"}),i.jsx("circle",{cx:"80",cy:"60",r:"4",fill:"#7C8DB5",opacity:"0.3"}),i.jsx("circle",{cx:"20",cy:"100",r:"4",fill:"#4ECDC4",opacity:"0.3"})]})}),i.jsx("rect",{width:"100%",height:"100%",fill:"url(#cable-pattern-title)"})]})}),i.jsxs("div",{className:"relative z-10 h-full flex flex-col justify-center items-center text-center px-20",children:[i.jsxs("div",{className:"mb-12",children:[i.jsx("img",{src:"/logo_white.png",alt:"Selent",className:"h-24 w-auto mx-auto mb-8"}),i.jsxs("div",{className:"inline-flex items-center px-6 py-3 rounded-full bg-white/5 backdrop-blur-sm border border-white/10",children:[i.jsx(na,{className:"h-5 w-5 mr-3 text-[#4ECDC4]"}),i.jsx("span",{className:"text-lg font-medium text-[#4ECDC4]",children:"Official Cisco Meraki Technology Partner"})]})]}),i.jsxs("h1",{className:"text-7xl font-bold tracking-tight mb-8",children:[i.jsx("span",{className:"text-white",children:"AI-Powered Network Operations"}),i.jsx("br",{}),i.jsx("span",{className:"text-[#4ECDC4]",children:"for Cisco Meraki"})]}),i.jsx("p",{className:"text-2xl text-gray-400 mb-16 max-w-4xl leading-relaxed",children:"Purpose-built automation platform that transforms how enterprises manage their Cisco Meraki infrastructure"}),i.jsxs("div",{className:"flex items-center justify-center gap-20",children:[i.jsxs("div",{className:"text-center",children:[i.jsx("div",{className:"text-5xl font-bold text-[#4ECDC4] mb-3",children:"100%"}),i.jsx("div",{className:"text-lg text-gray-400",children:"Automated Backup"})]}),i.jsx("div",{className:"w-px h-20 bg-white/10"}),i.jsxs("div",{className:"text-center",children:[i.jsx("div",{className:"text-5xl font-bold text-[#7C8DB5] mb-3",children:"All"}),i.jsx("div",{className:"text-lg text-gray-400",children:"Device Types Supported"})]}),i.jsx("div",{className:"w-px h-20 bg-white/10"}),i.jsxs("div",{className:"text-center",children:[i.jsx("div",{className:"text-5xl font-bold text-[#FF6B6B] mb-3",children:"99.9%"}),i.jsx("div",{className:"text-lg text-gray-400",children:"Uptime SLA"})]})]})]})]}),bA=({slideNumber:e})=>i.jsxs("div",{className:"deck-slide relative overflow-hidden bg-gradient-to-br from-[#0B1117] via-[#0F1823] to-[#0B1117]",children:[i.jsx("div",{className:"absolute inset-0 overflow-hidden pointer-events-none",children:i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-red-900/10 via-trans
9741parent to-orange-900/10"})}),i.jsxs("div",{className:"relative z-10 h-full flex flex-col justify-center px-20",children:[i.jsxs("div",{className:"mb-16",children:[i.jsx("h2",{className:"text-5xl font-bold text-white mb-6",children:"The Hidden Cost of Network Management"}),i.jsxs("p",{className:"text-2xl text-gray-400",children:["Enterprise teams spend ",i.jsx("span",{className:"text-[#FF6B6B] font-bold",children:"70% of their time"})," on manual configuration tasks"]})]}),i.jsxs("div",{className:"grid grid-cols-2 gap-8",children:[i.jsx("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-8",children:i.jsxs("div",{className:"flex items-start mb-4",children:[i.jsx("div",{className:"p-3 bg-red-500/20 rounded-lg mr-4",children:i.jsx(Zn,{className:"h-8 w-8 text-red-400"})}),i.jsxs("div",{children:[i.jsx("h3",{className:"text-2xl font-semibold text-white mb-2",children:"Configuration Loss Risk"}),i.jsx("p",{className:"text-lg text-gray-400 mb-4",children:"Manual backups are inconsistent and error-prone"}),i.jsxs("ul",{className:"space-y-2 text-gray-300",children:[i.jsxs("li",{className:"flex items-center",children:[i.jsx("span",{className:"text-red-400 mr-2",children:"â¢"}),"85% of outages involve configuration errors"]}),i.jsxs("li",{className:"flex items-center",children:[i.jsx("span",{className:"text-red-400 mr-2",children:"â¢"}),"Average recovery time: 4+ hours"]}),i.jsxs("li",{className:"flex items-center",children:[i.jsx("span",{className:"text-red-400 mr-2",children:"â¢"}),"$5,600 per minute of downtime"]})]})]})]})}),i.jsx("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-8",children:i.jsxs("div",{className:"flex items-start mb-4",children:[i.jsx("div",{className:"p-3 bg-orange-500/20 rounded-lg mr-4",children:i.jsx(at,{className:"h-8 w-8 text-orange-400"})}),i.jsxs("div",{children:[i.jsx("h3",{className:"text-2xl font-semibold text-white mb-2",children:"Complex Change Tracking"}),i.jsx("p",{className:"text-lg text-gray-400 mb-4",children:"Understanding configuration impact is time-consuming"}),i.jsxs("ul",{className:"space-y-2 text-gray-300",children:[i.jsxs("li",{className:"flex items-center",children:[i.jsx("span",{className:"text-orange-400 mr-2",children:"â¢"}),"3+ hours to analyze changes"]}),i.jsxs("li",{className:"flex items-center",children:[i.jsx("span",{className:"text-orange-400 mr-2",children:"â¢"}),"70% of changes undocumented"]}),i.jsxs("li",{className:"flex items-center",children:[i.jsx("span",{className:"text-orange-400 mr-2",children:"â¢"}),"Multi-vendor complexity"]})]})]})]})}),i.jsx("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-8",children:i.jsxs("div",{className:"flex items-start mb-4",children:[i.jsx("div",{className:"p-3 bg-yellow-500/20 rounded-lg mr-4",children:i.jsx(za,{className:"h-8 w-8 text-yellow-400"})}),i.jsxs("div",{children:[i.jsx("h3",{className:"text-2xl font-semibold text-white mb-2",children:"Inefficient Troubleshooting"}),i.jsx("p",{className:"text-lg text-gray-400 mb-4",children:"Finding specific configurations takes hours"}),i.jsxs("ul",{className:"space-y-2 text-gray-300",children:[i.jsxs("li",{className:"flex items-center",children:[i.jsx("span",{className:"text-yellow-400 mr-2",children:"â¢"}),"Manual search across devices"]}),i.jsxs("li",{className:"flex items-center",children:[i.jsx("span",{className:"text-yellow-400 mr-2",children:"â¢"}),"No unified view"]}),i.jsxs("li",{className:"flex items-center",children:[i.jsx("span",{className:"text-yellow-400 mr-2",children:"â¢"}),"CLI-only access limitations"]})]})]})]})}),i.jsx("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-8",children:i.jsxs("div",{className:"flex items-start mb-4",children:[i.jsx("div",{className:"p-3 bg-purple-500/20 rounded-lg mr-4",children:i.jsx(qe,{className:"h-8 w-8 text-purple-400"})}),i.jsxs("div",{children:[i.jsx("h3",{className:"text-2xl font-semibold text-white mb-2",children:"Compliance Gaps"}),i.jsx("p",{className:"text-lg text-gray-400 mb-4",children:"Manual compliance checking is incomplete"}),i.jsxs("ul",{className:"space-y-2 text-gray-300",children:[i.jsxs("li",{className:"flex items-center",children:[i.jsx("span",{className:"text-purple-400 mr-2",children:"â¢"}),"60% miss critical violations"]}),i.jsxs("li",{className:"flex items-center",children:[i.jsx("span",{className:"text-purple-400 mr-2",children:"â¢"}),"Audit preparation: 2+ weeks"]}),i.jsxs("li",{className:"flex items-center",children:[i.jsx("span",{className:"text-purple-400 mr-2",children:"â¢"}),"$2.7M average breach cost"]})]})]})]})})]}),i.jsx("div",{className:"mt-12 text-center p-6 bg-gradient-to-r from-red-500/10 to-orange-500/10 rounded-xl border border-red-500/20",children:i.jsxs("p",{className:"text-2xl text-white",children:[i.jsx("span",{className:"font-bold text-[#FF6B6B]",children:"87% of enterprises"})," experience network outages due to configuration issues annually"]})})]})]}),vA=({slideNumber:e})=>i.jsxs("div",{className:"deck-slide relative overflow-hidden bg-gradient-to-br from-[#0B1117] via-[#0F1823] to-[#0B1117]",children:[i.jsx("div",{className:"absolute inset-0 overflow-hidden pointer-events-none",children:i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-900/10 via-trans
9741parent to-blue-900/10"})}),i.jsxs("div",{className:"relative z-10 h-full flex flex-col justify-center px-20",children:[i.jsxs("div",{className:"text-center mb-16",children:[i.jsxs("h2",{className:"text-5xl font-bold text-white mb-6",children:["Introducing ",i.jsx("span",{className:"text-[#4ECDC4]",children:"Selent"})]}),i.jsx("p",{className:"text-2xl text-gray-400 max-w-4xl mx-auto",children:"The only AI-powered platform purpose-built for Cisco Meraki networks"})]}),i.jsxs("div",{className:"grid grid-cols-3 gap-8 mb-12",children:[i.jsxs("div",{className:"text-center",children:[i.jsxs("div",{className:"w-32 h-32 mx-auto mb-6 relative",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-500/20 to-blue-500/20 rounded-full blur-xl"}),i.jsx("div",{className:"relative bg-white/5 backdrop-blur-sm border border-white/10 rounded-full w-full h-full flex items-center justify-center",children:i.jsx(na,{className:"h-16 w-16 text-[#4ECDC4]"})})]}),i.jsx("h3",{className:"text-2xl font-semibold text-white mb-3",children:"Cisco Meraki Dashboard API"}),i.jsx("p",{className:"text-lg text-gray-400",children:"Deep integration with v0 & v1 APIs for complete coverage"})]}),i.jsx("div",{className:"flex items-center justify-center",children:i.jsx(ut,{className:"h-12 w-12 text-gray-600"})}),i.jsxs("div",{className:"text-center",children:[i.jsxs("div",{className:"w-32 h-32 mx-auto mb-6 relative",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-purple-500/20 to-pink-500/20 rounded-full blur-xl"}),i.jsx("div",{className:"relative bg-white/5 backdrop-blur-sm border border-white/10 rounded-full w-full h-full flex items-center justify-center",children:i.jsx(ea,{className:"h-16 w-16 text-[#7C8DB5]"})})]}),i.jsx("h3",{className:"text-2xl font-semibold text-white mb-3",children:"AI Processing Engine"}),i.jsx("p",{className:"text-lg text-gray-400",children:"Analyzes changes and provides insights in plain English"})]}),i.jsx("div",{className:"flex items-center justify-center",children:i.jsx(ut,{className:"h-12 w-12 text-gray-600"})}),i.jsxs("div",{className:"text-center",children:[i.jsxs("div",{className:"w-32 h-32 mx-auto mb-6 relative",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-green-500/20 to-emerald-500/20 rounded-full blur-xl"}),i.jsx("div",{className:"relative bg-white/5 backdrop-blur-sm border border-white/10 rounded-full w-full h-full flex items-center justify-center",children:i.jsx(xn,{className:"h-16 w-16 text-emerald-400"})})]}),i.jsx("h3",{className:"text-2xl font-semibold text-white mb-3",children:"Intelligent Automation"}),i.jsx("p",{className:"text-lg text-gray-400",children:"Automated backups, compliance checks, and alerts"})]})]}),i.jsx("div",{className:"bg-gradient-to-r from-cyan-500/10 to-blue-500/10 rounded-xl border border-cyan-500/20 p-8",children:i.jsxs("div",{className:"grid grid-cols-4 gap-8 text-center",children:[i.jsxs("div",{children:[i.jsx("div",{className:"text-3xl font-bold text-[#4ECDC4] mb-2",children:"100%"}),i.jsx("p",{className:"text-gray-300",children:"Cisco Meraki Focused"})]}),i.jsxs("div",{children:[i.jsx("div",{className:"text-3xl font-bold text-[#7C8DB5] mb-2",children:"6 Hours"}),i.jsx("p",{className:"text-gray-300",children:"Auto Backup"})]}),i.jsxs("div",{children:[i.jsx("div",{className:"text-3xl font-bold text-emerald-400 mb-2",children:"Real-time"}),i.jsx("p",{className:"text-gray-300",children:"Change Detection"})]}),i.jsxs("div",{children:[i.jsx("div",{className:"text-3xl font-bold text-[#FF6B6B] mb-2",children:"1-Click"}),i.jsx("p",{className:"text-gray-300",children:"Instant Restore"})]})]})})]})]}),wA=({slideNumber:e})=>i.jsx("div",{className:"deck-slide relative overflow-hidden bg-gradient-to-br from-[#0B1117] via-[#0F1823] to-[#0B1117]",children:i.jsxs("div",{className:"relative z-10 h-full flex flex-col justify-center px-20",children:[i.jsxs("div",{className:"mb-12",children:[i.jsxs("div",{className:"inline-flex items-center px-4 py-2 rounded-full bg-purple-500/10 border border-purple-500/20 mb-6",children:[i.jsx(ea,{className:"h-5 w-5 mr-2 text-[#7C8DB5]"}),i.jsx("span",{className:"text-sm font-medium text-[#7C8DB5] uppercase tracking-wide",children:"AI-Powered"})]}),i.jsx("h2",{className:"text-5xl font-bold text-white mb-4",children:"Intelligent Change Analysis"}),i.jsx("p",{className:"text-2xl text-gray-400",children:"AI explains configuration changes in plain English, instantly"})]}),i.jsxs("div",{className:"grid grid-cols-2 gap-8",children:[i.jsxs("div",{className:"space-y-6",children:[i.jsxs("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-6",children:[i.jsxs("h3",{className:"text-lg font-semibold text-white mb-4 flex items-center",children:[i.jsx(ge,{className:"h-5 w-5 text-orange-400 mr-2"}),"Configuration Change Detected"]}),i.jsxs("div",{className:"font-mono text-sm space-y-2",children:[i.jsx("div",{className:"text-red-400",children:"- VLAN 10: 192.168.10.0/24"}),i.jsx("div",{className:"text-green-400",children:"+ VLAN 10: 192.168.20.0/24"}),i.jsx("div",{className:"text-red-400",children:"- Firewall Rule: Allow 8
97410,443"}),i.jsx("div",{className:"text-green-400",children:"+ Firewall Rule: Allow 80,443,8080"}),i.jsx("div",{className:"text-gray-500",children:" Switch Port 5: Access â Trunk"})]})]}),i.jsxs("div",{className:"bg-gradient-to-br from-purple-500/10 to-blue-500/10 rounded-xl border border-purple-500/20 p-6",children:[i.jsxs("h3",{className:"text-lg font-semibold text-white mb-4 flex items-center",children:[i.jsx(tt,{className:"h-5 w-5 text-[#7C8DB5] mr-2"}),"AI Analysis"]}),i.jsxs("div",{className:"space-y-3 text-gray-300",children:[i.jsxs("p",{className:"flex items-start",children:[i.jsx("span",{className:"text-[#7C8DB5] mr-2",children:"â¢"}),i.jsx("span",{children:"VLAN 10 subnet changed - will affect 47 connected devices"})]}),i.jsxs("p",{className:"flex items-start",children:[i.jsx("span",{className:"text-[#7C8DB5] mr-2",children:"â¢"}),i.jsx("span",{children:"Port 8080 added to firewall - enables web application access"})]}),i.jsxs("p",{className:"flex items-start",children:[i.jsx("span",{className:"text-[#7C8DB5] mr-2",children:"â¢"}),i.jsx("span",{children:"Switch port 5 now carries multiple VLANs - check trunk configuration"})]})]})]})]}),i.jsxs("div",{className:"space-y-6",children:[i.jsxs("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-6",children:[i.jsx(Gc,{className:"h-8 w-8 text-[#7C8DB5] mb-4"}),i.jsx("h3",{className:"text-xl font-semibold text-white mb-3",children:"Natural Language Insights"}),i.jsx("p",{className:"text-gray-400",children:"Complex technical changes explained in simple terms that anyone can understand"})]}),i.jsxs("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-6",children:[i.jsx(y1,{className:"h-8 w-8 text-emerald-400 mb-4"}),i.jsx("h3",{className:"text-xl font-semibold text-white mb-3",children:"Impact Prediction"}),i.jsx("p",{className:"text-gray-400",children:"Proactively identifies which devices and services will be affected by changes"})]}),i.jsxs("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-6",children:[i.jsx(ge,{className:"h-8 w-8 text-orange-400 mb-4"}),i.jsx("h3",{className:"text-xl font-semibold text-white mb-3",children:"Risk Assessment"}),i.jsx("p",{className:"text-gray-400",children:"Automatically flags potentially risky changes before they cause issues"})]})]})]}),i.jsx("div",{className:"mt-12 bg-gradient-to-r from-purple-500/10 to-cyan-500/10 rounded-xl border border-purple-500/20 p-6",children:i.jsxs("div",{className:"flex justify-around text-center",children:[i.jsxs("div",{children:[i.jsx("div",{className:"text-3xl font-bold text-[#7C8DB5] mb-2",children:"3 seconds"}),i.jsx("p",{className:"text-gray-400",children:"Analysis Time"})]}),i.jsx("div",{className:"w-px bg-white/10"}),i.jsxs("div",{children:[i.jsx("div",{className:"text-3xl font-bold text-emerald-400 mb-2",children:"95%"}),i.jsx("p",{className:"text-gray-400",children:"Risk Reduction"})]}),i.jsx("div",{className:"w-px bg-white/10"}),i.jsxs("div",{children:[i.jsx("div",{className:"text-3xl font-bold text-[#4ECDC4] mb-2",children:"24/7"}),i.jsx("p",{className:"text-gray-400",children:"Monitoring"})]})]})})]})}),kA=({slideNumber:e})=>i.jsxs("div",{className:"deck-slide relative overflow-hidden bg-gradient-to-br from-[#0B1117] via-[#0F1823] to-[#0B1117]",children:[i.jsx("div",{className:"absolute inset-0 overflow-hidden pointer-events-none",children:i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-red-900/10 via-trans
9741parent to-emerald-900/10"})}),i.jsxs("div",{className:"relative z-10 h-full flex flex-col justify-center px-20",children:[i.jsxs("div",{className:"mb-12",children:[i.jsxs("div",{className:"inline-flex items-center px-4 py-2 rounded-full bg-red-500/10 border border-red-500/20 mb-6",children:[i.jsx(xn,{className:"h-5 w-5 mr-2 text-[#FF6B6B]"}),i.jsx("span",{className:"text-sm font-medium text-[#FF6B6B] uppercase tracking-wide",children:"Rapid Recovery"})]}),i.jsx("h2",{className:"text-5xl font-bold text-white mb-4",children:"Core Feature - Incident Remediation"}),i.jsx("p",{className:"text-2xl text-gray-400",children:"From disaster to operational in minutes, not hours"})]}),i.jsxs("div",{className:"grid grid-cols-3 gap-8 mb-12",children:[i.jsxs("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-8 text-center",children:[i.jsxs("div",{className:"w-20 h-20 mx-auto mb-6 relative",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-orange-500/20 to-red-500/20 rounded-full blur-xl"}),i.jsx("div",{className:"relative bg-white/5 backdrop-blur-sm border border-white/10 rounded-full w-full h-full flex items-center justify-center",children:i.jsx(f1,{className:"h-10 w-10 text-orange-400"})})]}),i.jsx("h3",{className:"text-xl font-semibold text-white mb-3",children:"Instant Detection"}),i.jsxs("div",{className:"space-y-2 text-gray-400 text-sm",children:[i.jsx("p",{children:"⢠Periodic monitoring of configuration changes"}),i.jsx("p",{children:"⢠AI semantic understanding of changes"})]})]}),i.jsxs("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-8 text-center",children:[i.jsxs("div",{className:"w-20 h-20 mx-auto mb-6 relative",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-emerald-500/20 to-green-500/20 rounded-full blur-xl"}),i.jsx("div",{className:"relative bg-white/5 backdrop-blur-sm border border-white/10 rounded-full w-full h-full flex items-center justify-center",children:i.jsx(g1,{className:"h-10 w-10 text-emerald-400"})})]}),i.jsx("h3",{className:"text-xl font-semibold text-white mb-3",children:"One-Click Recovery"}),i.jsxs("div",{className:"space-y-2 text-gray-400 text-sm",children:[i.jsx("p",{children:"⢠Instant rollback to last known good configuration"}),i.jsx("p",{children:"⢠Selective restoration of specific settings"}),i.jsx("p",{children:"⢠Zero downtime recovery process"})]})]}),i.jsxs("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-8 text-center",children:[i.jsxs("div",{className:"w-20 h-20 mx-auto mb-6 relative",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-blue-500/20 to-purple-500/20 rounded-full blur-xl"}),i.jsx("div",{className:"relative bg-white/5 backdrop-blur-sm border border-white/10 rounded-full w-full h-full flex items-center justify-center",children:i.jsx(Zn,{className:"h-10 w-10 text-[#7C8DB5]"})})]}),i.jsx("h3",{className:"text-xl font-semibold text-white mb-3",children:"Root Cause Analysis"}),i.jsxs("div",{className:"space-y-2 text-gray-400 text-sm",children:[i.jsx("p",{children:"⢠AI-powered investigation of failure points"}),i.jsx("p",{children:"⢠Detailed change timeline"}),i.jsx("p",{children:"⢠Preventive recommendations"})]})]})]}),i.jsxs("div",{className:"grid grid-cols-2 gap-8",children:[i.jsxs("div",{className:"bg-gradient-to-r from-emerald-500/10 to-cyan-500/10 rounded-xl border border-emerald-500/20 p-6",children:[i.jsx("h3",{className:"text-2xl font-semibold text-white mb-6",children:"Recovery Metrics"}),i.jsxs("div",{className:"grid grid-cols-3 gap-4 text-center",children:[i.jsxs("div",{children:[i.jsx("div",{className:"text-3xl font-bold text-emerald-400 mb-2",children:"1 minute"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Average recovery time"})]}),i.jsxs("div",{children:[i.jsx("div",{className:"text-3xl font-bold text-[#4ECDC4] mb-2",children:"99.9%"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Success rate"})]}),i.jsxs("div",{children:[i.jsx("div",{className:"text-3xl font-bold text-[#7C8DB5] mb-2",children:"Zero"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Manual intervention required"})]})]})]}),i.jsxs("div",{className:"bg-gradient-to-r from-red-500/10 to-emerald-500/10 rounded-xl border border-red-500/20 p-6",children:[i.jsx("h3",{className:"text-2xl font-semibold text-white mb-6",children:"Real-World Impact"}),i.jsxs("div",{className:"space-y-4",children:[i.jsxs("div",{className:"flex items-start",children:[i.jsx(Zn,{className:"h-5 w-5 text-red-400 mr-3 mt-0.5"}),i.jsxs("div",{children:[i.jsx("p",{className:"text-white font-medium",children:"Before Selent:"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"4+ hours downtime, manual recovery, lost revenue"})]})]}),i.jsxs("div",{className:"flex items-start",children:[i.jsx(oe,{className:"h-5 w-5 text-emerald-400 mr-3 mt-0.5"}),i.jsxs("div",{children:[i.jsx("p",{className:"text-white font-medium",children:"With Selent:"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Instant recovery, automated remediation, continuous operation"})]})]})]})]})]})]})]}),AA=({slideNumber:e})=>i.jsxs("div",{className:"deck-slide relative overflow-hidden bg-gradient-to-br from-[#0B1117] via-[#0F1823] to-[#0B1117]",children:[i.jsxs("div",{className:"absolute inset-0 overflow-hidden pointer-events-none",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-purple-900/10 via-trans
9741parent to-cyan-900/10"}),i.jsxs("div",{className:"absolute inset-0",children:[i.jsx("div",{className:"absolute top-1/4 left-1/4 w-4 h-4 bg-[#4ECDC4]/20 rounded-full animate-pulse"}),i.jsx("div",{className:"absolute top-3/4 right-1/4 w-3 h-3 bg-[#7C8DB5]/20 rounded-full animate-pulse delay-1000"}),i.jsx("div",{className:"absolute bottom-1/4 left-3/4 w-2 h-2 bg-[#FF6B6B]/20 rounded-full animate-pulse delay-2000"})]})]}),i.jsxs("div",{className:"relative z-10 h-full flex flex-col justify-center items-center text-center px-20",children:[i.jsxs("div",{className:"inline-flex items-center px-6 py-3 rounded-full bg-purple-500/10 border border-purple-500/20 mb-12",children:[i.jsx(tt,{className:"h-6 w-6 mr-3 text-purple-400"}),i.jsx("span",{className:"text-xl font-medium text-purple-400 uppercase tracking-wide",children:"Live Demo"})]}),i.jsxs("div",{className:"max-w-4xl mx-auto",children:[i.jsxs("div",{className:"w-48 h-48 mx-auto mb-16 relative",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-purple-500/20 to-cyan-500/20 rounded-full blur-3xl animate-pulse"}),i.jsx("div",{className:"relative bg-white/5 backdrop-blur-sm border-2 border-white/10 rounded-full w-full h-full flex items-center justify-center",children:i.jsx(Bg,{className:"h-24 w-24 text-[#4ECDC4] ml-3"})})]}),i.jsx("h1",{className:"text-8xl font-bold text-white mb-8",children:"Demo time!"}),i.jsx("p",{className:"text-2xl text-gray-400 mb-16 max-w-3xl mx-auto leading-relaxed",children:"See Selent's AI-powered network management in action"}),i.jsxs("div",{className:"grid grid-cols-3 gap-8 max-w-4xl mx-auto",children:[i.jsxs("div",{className:"text-center",children:[i.jsx("div",{className:"w-16 h-16 mx-auto mb-4 bg-gradient-to-br from-cyan-500/20 to-blue-500/20 rounded-lg flex items-center justify-center",children:i.jsx(lo,{className:"h-8 w-8 text-[#4ECDC4]"})}),i.jsx("p",{className:"text-gray-300",children:"Live Configuration Analysis"})]}),i.jsxs("div",{className:"text-center",children:[i.jsx("div",{className:"w-16 h-16 mx-auto mb-4 bg-gradient-to-br from-emerald-500/20 to-green-500/20 rounded-lg flex items-center justify-center",children:i.jsx(tt,{className:"h-8 w-8 text-emerald-400"})}),i.jsx("p",{className:"text-gray-300",children:"AI-Powered Insights"})]}),i.jsxs("div",{className:"text-center",children:[i.jsx("div",{className:"w-16 h-16 mx-auto mb-4 bg-gradient-to-br from-purple-500/20 to-pink-500/20 rounded-lg flex items-center justify-center",children:i.jsx(Bg,{className:"h-8 w-8 text-[#7C8DB5]"})}),i.jsx("p",{className:"text-gray-300",children:"One-Click Recovery"})]})]})]})]})]}),CA=({slideNumber:e})=>i.jsxs("div",{className:"deck-slide relative overflow-hidden bg-gradient-to-br from-[#0B1117] via-[#0F1823] to-[#0B1117]",children:[i.jsx("div",{className:"absolute inset-0 overflow-hidden pointer-events-none",children:i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-900/10 via-trans
9741parent to-purple-900/10"})}),i.jsxs("div",{className:"relative z-10 h-full flex flex-col justify-center px-20",children:[i.jsxs("div",{className:"text-center mb-12",children:[i.jsxs("div",{className:"inline-flex items-center px-4 py-2 rounded-full bg-cyan-500/10 border border-cyan-500/20 mb-6",children:[i.jsx(Us,{className:"h-5 w-5 mr-2 text-[#4ECDC4]"}),i.jsx("span",{className:"text-sm font-medium text-[#4ECDC4] uppercase tracking-wide",children:"Complete Platform"})]}),i.jsx("h2",{className:"text-5xl font-bold text-white mb-4",children:"Tool Suite Overview"}),i.jsx("p",{className:"text-2xl text-gray-400",children:"Complete Network Management Platform"})]}),i.jsxs("div",{className:"grid grid-cols-3 gap-8 mb-12",children:[i.jsxs("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-8",children:[i.jsxs("div",{className:"w-16 h-16 mb-6 relative",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-500/20 to-blue-500/20 rounded-lg blur-xl"}),i.jsx("div",{className:"relative bg-white/5 backdrop-blur-sm border border-white/10 rounded-lg w-full h-full flex items-center justify-center",children:i.jsx(ta,{className:"h-8 w-8 text-[#4ECDC4]"})})]}),i.jsx("h3",{className:"text-2xl font-semibold text-white mb-4",children:"Configuration Management"}),i.jsxs("div",{className:"space-y-2 text-gray-400",children:[i.jsxs("p",{className:"flex items-center text-sm",children:[i.jsx(oe,{className:"h-4 w-4 text-emerald-400 mr-2"}),"Automated backup & restore"]}),i.jsxs("p",{className:"flex items-center text-sm",children:[i.jsx(oe,{className:"h-4 w-4 text-emerald-400 mr-2"}),"Version control & comparison"]}),i.jsxs("p",{className:"flex items-center text-sm",children:[i.jsx(oe,{className:"h-4 w-4 text-emerald-400 mr-2"}),"Change tracking & documentation"]})]})]}),i.jsxs("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-8",children:[i.jsxs("div",{className:"w-16 h-16 mb-6 relative",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-purple-500/20 to-pink-500/20 rounded-lg blur-xl"}),i.jsx("div",{className:"relative bg-white/5 backdrop-blur-sm border border-white/10 rounded-lg w-full h-full flex items-center justify-center",children:i.jsx(qe,{className:"h-8 w-8 text-[#7C8DB5]"})})]}),i.jsx("h3",{className:"text-2xl font-semibold text-white mb-4",children:"Compliance & Security"}),i.jsxs("div",{className:"space-y-2 text-gray-400",children:[i.jsxs("p",{className:"flex items-center text-sm",children:[i.jsx(oe,{className:"h-4 w-4 text-emerald-400 mr-2"}),"AI-powered compliance auditing"]}),i.jsxs("p",{className:"flex items-center text-sm",children:[i.jsx(oe,{className:"h-4 w-4 text-emerald-400 mr-2"}),"Security vulnerability detection"]}),i.jsxs("p",{className:"flex items-center text-sm",children:[i.jsx(oe,{className:"h-4 w-4 text-emerald-400 mr-2"}),"Automated remediation workflows"]})]})]}),i.jsxs("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-8",children:[i.jsxs("div",{className:"w-16 h-16 mb-6 relative",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-emerald-500/20 to-green-500/20 rounded-lg blur-xl"}),i.jsx("div",{className:"relative bg-white/5 backdrop-blur-sm border border-white/10 rounded-lg w-full h-full flex items-center justify-center",children:i.jsx(xn,{className:"h-8 w-8 text-emerald-400"})})]}),i.jsx("h3",{className:"text-2xl font-semibold text-white mb-4",children:"Intelligent Automation"}),i.jsxs("div",{className:"space-y-2 text-gray-400",children:[i.jsxs("p",{className:"flex items-center text-sm",children:[i.jsx(oe,{className:"h-4 w-4 text-emerald-400 mr-2"}),"Switch port management"]}),i.jsxs("p",{className:"flex items-center text-sm",children:[i.jsx(oe,{className:"h-4 w-4 text-emerald-400 mr-2"}),"Tag standardization"]}),i.jsxs("p",{className:"flex items-center text-sm",children:[i.jsx(oe,{className:"h-4 w-4 text-emerald-400 mr-2"}),"Bulk operations"]})]})]})]}),i.jsxs("div",{className:"bg-gradient-to-r from-cyan-500/10 to-purple-500/10 rounded-xl border border-cyan-500/20 p-8",children:[i.jsx("div",{className:"text-center mb-6",children:i.jsx("h3",{className:"text-2xl font-semibold text-white mb-3",children:"Integration Ecosystem"})}),i.jsxs("div",{className:"grid grid-cols-2 gap-8 max-w-3xl mx-auto",children:[i.jsxs("div",{className:"flex items-center justify-center space-x-4",children:[i.jsx("div",{className:"w-12 h-12 bg-gradient-to-br from-cyan-500/20 to-blue-500/20 rounded-lg flex items-center justify-center",children:i.jsx(na,{className:"h-6 w-6 text-[#4ECDC4]"})}),i.jsxs("div",{children:[i.jsx("p",{className:"text-white font-medium",children:"Native Cisco Meraki Dashboard API integration"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Complete v0 & v1 API coverage"})]})]}),i.jsxs("div",{className:"flex items-center justify-center space-x-4",children:[i.jsx("div",{className:"w-12 h-12 bg-gradient-to-br from-purple-500/20 to-pink-500/20 rounded-lg flex items-center justify-center",children:i.jsx(Us,{className:"h-6 w-6 text-[#7C8DB5]"})}),i.jsxs("div",{children:[i.jsx("p",{className:"text-white font-medium",children:"REST API for custom integrations"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Extensible platform architecture"})]})]})]})]})]})]}),EA=({slideNumber:e})=>i.jsxs("div",{className:"deck-slide relative overflow-hidden bg-gradient-to-br from-[#0B1117] via-[#0F1823] to-[#0B1117]",children:[i.jsx("div",{className:"absolute inset-0 overflow-hidden pointer-events-none",children:i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-purple-900/10 via-trans
9741parent to-emerald-900/10"})}),i.jsxs("div",{className:"relative z-10 h-full flex flex-col justify-center px-20",children:[i.jsxs("div",{className:"mb-12",children:[i.jsxs("div",{className:"inline-flex items-center px-4 py-2 rounded-full bg-purple-500/10 border border-purple-500/20 mb-6",children:[i.jsx(qe,{className:"h-5 w-5 mr-2 text-[#7C8DB5]"}),i.jsx("span",{className:"text-sm font-medium text-[#7C8DB5] uppercase tracking-wide",children:"Automated Compliance Excellence"})]}),i.jsx("h2",{className:"text-5xl font-bold text-white mb-4",children:"AI-Powered Compliance Audit"}),i.jsxs("p",{className:"text-xl text-gray-400",children:[i.jsx("span",{className:"text-gray-300",children:"(Preview)"})," Pass any audit with confidence"]})]}),i.jsxs("div",{className:"grid grid-cols-5 gap-6 mb-12",children:[i.jsxs("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-6 text-center",children:[i.jsx("div",{className:"w-12 h-12 mx-auto mb-4 bg-gradient-to-br from-red-500/20 to-orange-500/20 rounded-lg flex items-center justify-center",children:i.jsx(qe,{className:"h-6 w-6 text-red-400"})}),i.jsx("h4",{className:"text-lg font-semibold text-white mb-2",children:"PCI DSS"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Payment card industry standards"})]}),i.jsxs("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-6 text-center",children:[i.jsx("div",{className:"w-12 h-12 mx-auto mb-4 bg-gradient-to-br from-blue-500/20 to-cyan-500/20 rounded-lg flex items-center justify-center",children:i.jsx(iT,{className:"h-6 w-6 text-[#4ECDC4]"})}),i.jsx("h4",{className:"text-lg font-semibold text-white mb-2",children:"HIPAA"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Healthcare compliance requirements"})]}),i.jsxs("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-6 text-center",children:[i.jsx("div",{className:"w-12 h-12 mx-auto mb-4 bg-gradient-to-br from-emerald-500/20 to-green-500/20 rounded-lg flex items-center justify-center",children:i.jsx(oe,{className:"h-6 w-6 text-emerald-400"})}),i.jsx("h4",{className:"text-lg font-semibold text-white mb-2",children:"SOC2"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Service organization controls"})]}),i.jsxs("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-6 text-center",children:[i.jsx("div",{className:"w-12 h-12 mx-auto mb-4 bg-gradient-to-br from-purple-500/20 to-pink-500/20 rounded-lg flex items-center justify-center",children:i.jsx(so,{className:"h-6 w-6 text-[#7C8DB5]"})}),i.jsx("h4",{className:"text-lg font-semibold text-white mb-2",children:"ISO 27001"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Information security management"})]}),i.jsxs("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-6 text-center",children:[i.jsx("div",{className:"w-12 h-12 mx-auto mb-4 bg-gradient-to-br from-yellow-500/20 to-orange-500/20 rounded-lg flex items-center justify-center",children:i.jsx(qe,{className:"h-6 w-6 text-yellow-400"})}),i.jsx("h4",{className:"text-lg font-semibold text-white mb-2",children:"NIST"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Cybersecurity framework"})]})]}),i.jsxs("div",{className:"grid grid-cols-2 gap-8",children:[i.jsxs("div",{className:"bg-gradient-to-br from-purple-500/10 to-cyan-500/10 rounded-xl border border-purple-500/20 p-8",children:[i.jsxs("h3",{className:"text-2xl font-semibold text-white mb-6 flex items-center",children:[i.jsx(f1,{className:"h-6 w-6 text-[#7C8DB5] mr-3"}),"Compliance Verification Engine"]}),i.jsxs("div",{className:"space-y-4",children:[i.jsxs("div",{className:"flex items-start",children:[i.jsx(oe,{className:"h-5 w-5 text-emerald-400 mr-3 mt-0.5"}),i.jsxs("div",{children:[i.jsx("p",{className:"text-white font-medium",children:"Automated Scanning"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Continuous compliance monitoring"})]})]}),i.jsxs("div",{className:"flex items-start",children:[i.jsx(oe,{className:"h-5 w-5 text-emerald-400 mr-3 mt-0.5"}),i.jsxs("div",{children:[i.jsx("p",{className:"text-white font-medium",children:"Configuration Analysis"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Firewall rule verification (default deny-all)"})]})]}),i.jsxs("div",{className:"flex items-start",children:[i.jsx(oe,{className:"h-5 w-5 text-emerald-400 mr-3 mt-0.5"}),i.jsxs("div",{children:[i.jsx("p",{className:"text-white font-medium",children:"Protocol Enforcement"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Secure protocol enforcement"})]})]}),i.jsxs("div",{className:"flex items-start",children:[i.jsx(oe,{className:"h-5 w-5 text-emerald-400 mr-3 mt-0.5"}),i.jsxs("div",{children:[i.jsx("p",{className:"text-white font-medium",children:"Authentication Checks"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Authentication configuration checks"})]})]})]})]}),i.jsxs("div",{className:"bg-gradient-to-br from-emerald-500/10 to-purple-500/10 rounded-xl border border-emerald-500/20 p-8",children:[i.jsx("h3",{className:"text-2xl font-semibold text-white mb-6",children:"Compliance Benefits"}),i.jsxs("div",{className:"space-y-6",children:[i.jsxs("div",{className:"text-center",children:[i.jsx("div",{className:"text-4xl font-bold text-emerald-400 mb-2",children:"100%"}),i.jsx("p",{className:"text-gray-400",children:"Automated Compliance Checking"})]}),i.jsxs("div",{className:"text-center",children:[i.jsx("div",{className:"text-4xl font-bold text-[#4ECDC4] mb-2",children:"24/7"}),i.jsx("p",{className:"text-gray-400",children:"Continuous Monitoring"})]}),i.jsxs("div",{className:"text-center",children:[i.jsx("div",{className:"text-4xl font-bold text-[#7C8DB5] mb-2",children:"Real-time"}),i.jsx("p",{className:"text-gray-400",children:"Violation Detection"})]})]})]})]})]})]}),NA=({slideNumber:e})=>i.jsxs("div",{className:"deck-slide relative overflow-hidden bg-gradient-to-br from-[#0B1117] via-[#0F1823] to-[#0B1117]",children:[i.jsx("div",{className:"absolute inset-0 overflow-hidden pointer-events-none",children:i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-900/10 via-trans
9741parent to-emerald-900/10"})}),i.jsxs("div",{className:"relative z-10 h-full flex flex-col justify-center px-20",children:[i.jsxs("div",{className:"mb-12",children:[i.jsxs("div",{className:"inline-flex items-center px-4 py-2 rounded-full bg-cyan-500/10 border border-cyan-500/20 mb-6",children:[i.jsx(na,{className:"h-5 w-5 mr-2 text-[#4ECDC4]"}),i.jsx("span",{className:"text-sm font-medium text-[#4ECDC4] uppercase tracking-wide",children:"Enterprise-Grade Port Management"})]}),i.jsx("h2",{className:"text-5xl font-bold text-white mb-4",children:"Switch Port Manager"}),i.jsx("p",{className:"text-2xl text-gray-400",children:"Streamline complex switch operations"})]}),i.jsxs("div",{className:"grid grid-cols-2 gap-8 mb-12",children:[i.jsxs("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-8",children:[i.jsxs("div",{className:"flex items-center mb-6",children:[i.jsx("div",{className:"w-12 h-12 mr-4 bg-gradient-to-br from-cyan-500/20 to-blue-500/20 rounded-lg flex items-center justify-center",children:i.jsx(xn,{className:"h-6 w-6 text-[#4ECDC4]"})}),i.jsx("h3",{className:"text-2xl font-semibold text-white",children:"Bulk Operations"})]}),i.jsxs("div",{className:"space-y-3 text-gray-400",children:[i.jsxs("p",{className:"flex items-center text-sm",children:[i.jsx(oe,{className:"h-4 w-4 text-emerald-400 mr-2"}),"Configure hundreds of ports simultaneously"]}),i.jsxs("p",{className:"flex items-center text-sm",children:[i.jsx(oe,{className:"h-4 w-4 text-emerald-400 mr-2"}),"Template-based configurations"]}),i.jsxs("p",{className:"flex items-center text-sm",children:[i.jsx(oe,{className:"h-4 w-4 text-emerald-400 mr-2"}),"Scheduled maintenance windows"]})]})]}),i.jsxs("div",{className:"bg-gradient-to-br from-emerald-500/10 to-cyan-500/10 rounded-xl border border-emerald-500/20 p-8",children:[i.jsx("h3",{className:"text-2xl font-semibold text-white mb-6",children:"Performance Impact"}),i.jsxs("div",{className:"grid grid-cols-1 gap-6",children:[i.jsxs("div",{className:"text-center",children:[i.jsx("div",{className:"text-4xl font-bold text-emerald-400 mb-2",children:"90%"}),i.jsx("p",{className:"text-gray-400",children:"reduction in configuration time"})]}),i.jsxs("div",{className:"text-center",children:[i.jsx("div",{className:"text-4xl font-bold text-[#4ECDC4] mb-2",children:"Zero"}),i.jsx("p",{className:"text-gray-400",children:"manual errors"})]}),i.jsxs("div",{className:"text-center",children:[i.jsx("div",{className:"text-4xl font-bold text-[#7C8DB5] mb-2",children:"100%"}),i.jsx("p",{className:"text-gray-400",children:"policy consistency"})]})]})]})]}),i.jsxs("div",{className:"bg-gradient-to-r from-cyan-500/10 to-emerald-500/10 rounded-xl border border-cyan-500/20 p-8",children:[i.jsx("h3",{className:"text-2xl font-semibold text-white mb-8 text-center",children:"Use Cases"}),i.jsxs("div",{className:"grid grid-cols-3 gap-8",children:[i.jsxs("div",{className:"text-center",children:[i.jsx("div",{className:"w-16 h-16 mx-auto mb-4 bg-gradient-to-br from-blue-500/20 to-cyan-500/20 rounded-lg flex items-center justify-center",children:i.jsx(ro,{className:"h-8 w-8 text-[#4ECDC4]"})}),i.jsx("h4",{className:"text-xl font-semibold text-white mb-3",children:"Office Moves"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Reconfigure entire floors in minutes"})]}),i.jsxs("div",{className:"text-center",children:[i.jsx("div",{className:"w-16 h-16 mx-auto mb-4 bg-gradient-to-br from-purple-500/20 to-pink-500/20 rounded-lg flex items-center justify-center",children:i.jsx(qe,{className:"h-8 w-8 text-[#7C8DB5]"})}),i.jsx("h4",{className:"text-xl font-semibold text-white mb-3",children:"Security Updates"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Apply ACLs across all switches instantly"})]}),i.jsxs("div",{className:"text-center",children:[i.jsx("div",{className:"w-16 h-16 mx-auto mb-4 bg-gradient-to-br from-emerald-500/20 to-green-500/20 rounded-lg flex items-center justify-center",children:i.jsx(oe,{className:"h-8 w-8 text-emerald-400"})}),i.jsx("h4",{className:"text-xl font-semibold text-white mb-3",children:"Compliance"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Ensure consistent security policies"})]})]})]})]})]}),TA=({slideNumber:e})=>i.jsxs("div",{className:"deck-slide relative overflow-hidden bg-gradient-to-br from-[#0B1117] via-[#0F1823] to-[#0B1117]",children:[i.jsx("div",{className:"absolute inset-0 overflow-hidden pointer-events-none",children:i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-purple-900/10 via-trans
9741parent to-cyan-900/10"})}),i.jsxs("div",{className:"relative z-10 h-full flex flex-col justify-center px-20",children:[i.jsxs("div",{className:"text-center mb-12",children:[i.jsxs("div",{className:"inline-flex items-center px-4 py-2 rounded-full bg-purple-500/10 border border-purple-500/20 mb-6",children:[i.jsx(pT,{className:"h-5 w-5 mr-2 text-[#7C8DB5]"}),i.jsx("span",{className:"text-sm font-medium text-[#7C8DB5] uppercase tracking-wide",children:"Intelligent Organization"})]}),i.jsx("h2",{className:"text-5xl font-bold text-white mb-4",children:"Tag Management System"}),i.jsxs("p",{className:"text-2xl text-gray-400",children:[i.jsx("span",{className:"text-white font-semibold",children:"Organize."})," ",i.jsx("span",{className:"text-[#4ECDC4] font-semibold",children:"Standardize."})," ",i.jsx("span",{className:"text-emerald-400 font-semibold",children:"Automate."})]})]}),i.jsxs("div",{className:"grid grid-cols-2 gap-8 mb-12",children:[i.jsxs("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-8",children:[i.jsxs("div",{className:"flex items-center mb-6",children:[i.jsx("div",{className:"w-12 h-12 mr-4 bg-gradient-to-br from-cyan-500/20 to-blue-500/20 rounded-lg flex items-center justify-center",children:i.jsx(at,{className:"h-6 w-6 text-[#4ECDC4]"})}),i.jsx("h3",{className:"text-2xl font-semibold text-white",children:"Auto-Discovery & Classification"})]}),i.jsxs("div",{className:"space-y-3 text-gray-400",children:[i.jsxs("p",{className:"flex items-center text-sm",children:[i.jsx(oe,{className:"h-4 w-4 text-emerald-400 mr-2"}),"Automatic device categorization"]}),i.jsxs("p",{className:"flex items-center text-sm",children:[i.jsx(oo,{className:"h-4 w-4 text-yellow-400 mr-2"}),"Location-based tagging (in development)"]})]})]}),i.jsxs("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-8",children:[i.jsxs("div",{className:"flex items-center mb-6",children:[i.jsx("div",{className:"w-12 h-12 mr-4 bg-gradient-to-br from-purple-500/20 to-pink-500/20 rounded-lg flex items-center justify-center",children:i.jsx(Fg,{className:"h-6 w-6 text-[#7C8DB5]"})}),i.jsx("h3",{className:"text-2xl font-semibold text-white",children:"Tag Standardization"})]}),i.jsxs("div",{className:"space-y-3 text-gray-400",children:[i.jsxs("p",{className:"flex items-center text-sm",children:[i.jsx(oe,{className:"h-4 w-4 text-emerald-400 mr-2"}),"Enforce naming conventions"]}),i.jsxs("p",{className:"flex items-center text-sm",children:[i.jsx(oe,{className:"h-4 w-4 text-emerald-400 mr-2"}),"Remove duplicates and conflicts"]}),i.jsxs("p",{className:"flex items-center text-sm",children:[i.jsx(oe,{className:"h-4 w-4 text-emerald-400 mr-2"}),"Hierarchical tag structures"]}),i.jsxs("p",{className:"flex items-center text-sm",children:[i.jsx(oe,{className:"h-4 w-4 text-emerald-400 mr-2"}),"Cross-network consistency"]})]})]})]}),i.jsxs("div",{className:"grid grid-cols-2 gap-8",children:[i.jsxs("div",{className:"bg-gradient-to-br from-emerald-500/10 to-cyan-500/10 rounded-xl border border-emerald-500/20 p-8",children:[i.jsx("h3",{className:"text-2xl font-semibold text-white mb-6",children:"Business Benefits"}),i.jsxs("div",{className:"space-y-4",children:[i.jsxs("div",{className:"flex items-start",children:[i.jsx(at,{className:"h-5 w-5 text-[#4ECDC4] mr-3 mt-0.5"}),i.jsxs("div",{children:[i.jsx("p",{className:"text-white font-medium",children:"Instant Device Location"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Find any device in seconds"})]})]}),i.jsxs("div",{className:"flex items-start",children:[i.jsx(In,{className:"h-5 w-5 text-emerald-400 mr-3 mt-0.5"}),i.jsxs("div",{children:[i.jsx("p",{className:"text-white font-medium",children:"Simplified Reporting"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Group metrics by business units"})]})]}),i.jsxs("div",{className:"flex items-start",children:[i.jsx(Fg,{className:"h-5 w-5 text-[#7C8DB5] mr-3 mt-0.5"}),i.jsxs("div",{children:[i.jsx("p",{className:"text-white font-medium",children:"Automated Workflows"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Tag-based automation rules"})]})]}),i.jsxs("div",{className:"flex items-start",children:[i.jsx(oe,{className:"h-5 w-5 text-purple-400 mr-3 mt-0.5"}),i.jsxs("div",{children:[i.jsx("p",{className:"text-white font-medium",children:"Compliance Tracking"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Tag-based audit trails"})]})]})]})]}),i.jsxs("div",{className:"bg-gradient-to-br from-purple-500/10 to-cyan-500/10 rounded-xl border border-purple-500/20 p-8",children:[i.jsx("h3",{className:"text-2xl font-semibold text-white mb-6",children:"Results"}),i.jsxs("div",{className:"grid grid-cols-1 gap-6",children:[i.jsxs("div",{className:"text-center",children:[i.jsx("div",{className:"text-4xl font-bold text-[#4ECDC4] mb-2",children:"75%"}),i.jsx("p",{className:"text-gray-400",children:"faster device searches"})]}),i.jsxs("div",{className:"text-center",children:[i.jsx("div",{className:"text-4xl font-bold text-emerald-400 mb-2",children:"100%"}),i.jsx("p",{className:"text-gray-400",children:"naming consistency"})]}),i.jsxs("div",{className:"text-center",children:[i.jsx("div",{className:"text-4xl font-bold text-[#7C8DB5] mb-2",children:"50%"}),i.jsx("p",{className:"text-gray-400",children:"reduction in policy management time"})]})]})]})]})]})]}),SA=({slideNumber:e})=>i.jsxs("div",{className:"deck-slide relative overflow-hidden bg-gradient-to-br from-[#0B1117] via-[#0F1823] to-[#0B1117]",children:[i.jsxs("div",{className:"absolute inset-0 overflow-hidden pointer-events-none",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-purple-900/10 via-trans
9741parent to-cyan-900/10"}),i.jsxs("div",{className:"absolute inset-0",children:[i.jsx("div",{className:"absolute top-1/6 left-1/6 w-3 h-3 bg-purple-400/30 rounded-full animate-pulse"}),i.jsx("div",{className:"absolute top-2/3 right-1/5 w-2 h-2 bg-cyan-400/30 rounded-full animate-pulse delay-1000"}),i.jsx("div",{className:"absolute bottom-1/5 left-2/3 w-4 h-4 bg-emerald-400/30 rounded-full animate-pulse delay-2000"})]})]}),i.jsxs("div",{className:"relative z-10 h-full flex flex-col justify-center px-20",children:[i.jsxs("div",{className:"text-center mb-12",children:[i.jsxs("div",{className:"inline-flex items-center px-4 py-2 rounded-full bg-purple-500/10 border border-purple-500/20 mb-6",children:[i.jsx(JN,{className:"h-5 w-5 mr-2 text-[#7C8DB5]"}),i.jsx("span",{className:"text-sm font-medium text-[#7C8DB5] uppercase tracking-wide",children:"Innovation Lab"})]}),i.jsx("h2",{className:"text-5xl font-bold text-white mb-4",children:"R&D Innovation Lab"}),i.jsx("p",{className:"text-2xl text-gray-400",children:"Building the Future of Network Management"})]}),i.jsxs("div",{className:"grid grid-cols-2 gap-8 mb-12",children:[i.jsxs("div",{className:"bg-gradient-to-br from-emerald-500/10 to-cyan-500/10 rounded-xl border border-emerald-500/20 p-8",children:[i.jsxs("div",{className:"flex items-center mb-6",children:[i.jsx("div",{className:"w-12 h-12 mr-4 bg-gradient-to-br from-emerald-500/20 to-cyan-500/20 rounded-lg flex items-center justify-center",children:i.jsx(ur,{className:"h-6 w-6 text-emerald-400"})}),i.jsxs("div",{children:[i.jsx("h3",{className:"text-2xl font-semibold text-white",children:"Selent MCP"}),i.jsx("p",{className:"text-emerald-400 text-sm font-medium",children:"(Now Available)"})]})]}),i.jsxs("div",{className:"space-y-3 text-gray-400",children:[i.jsxs("p",{className:"flex items-center text-sm",children:[i.jsx(tt,{className:"h-4 w-4 text-emerald-400 mr-2"}),"Open-source Model Context Protocol server"]}),i.jsxs("p",{className:"flex items-center text-sm",children:[i.jsx(tt,{className:"h-4 w-4 text-emerald-400 mr-2"}),"400+ Cisco Meraki API endpoints accessible"]}),i.jsxs("p",{className:"flex items-center text-sm",children:[i.jsx(tt,{className:"h-4 w-4 text-emerald-400 mr-2"}),"Natural language API discovery"]}),i.jsxs("p",{className:"flex items-center text-sm",children:[i.jsx(b1,{className:"h-4 w-4 text-emerald-400 mr-2"}),"Community-driven development"]})]})]}),i.jsxs("div",{className:"bg-gradient-to-br from-purple-500/10 to-pink-500/10 rounded-xl border border-purple-500/20 p-8",children:[i.jsxs("div",{className:"flex items-center mb-6",children:[i.jsx("div",{className:"w-12 h-12 mr-4 bg-gradient-to-br from-purple-500/20 to-pink-500/20 rounded-lg flex items-center justify-center",children:i.jsx(Un,{className:"h-6 w-6 text-[#7C8DB5]"})}),i.jsxs("div",{children:[i.jsx("h3",{className:"text-2xl font-semibold text-white",children:"Selent Agent"}),i.jsx("p",{className:"text-purple-400 text-sm font-medium",children:"(Coming Soon)"})]})]}),i.jsxs("div",{className:"space-y-3 text-gray-400",children:[i.jsxs("p",{className:"flex items-center text-sm",children:[i.jsx(Un,{className:"h-4 w-4 text-[#7C8DB5] mr-2"}),"AI-powered network assistant"]}),i.jsxs("p",{className:"flex items-center text-sm",children:[i.jsx(Un,{className:"h-4 w-4 text-[#7C8DB5] mr-2"}),"Tailored UI for network operations"]}),i.jsxs("p",{className:"flex items-center text-sm",children:[i.jsx(Un,{className:"h-4 w-4 text-[#7C8DB5] mr-2"}),"Predictive issue resolution"]}),i.jsxs("p",{className:"flex items-center text-sm",children:[i.jsx(Un,{className:"h-4 w-4 text-[#7C8DB5] mr-2"}),"Autonomous remediation"]})]})]})]}),i.jsxs("div",{className:"bg-gradient-to-r from-purple-500/10 to-cyan-500/10 rounded-xl border border-purple-500/20 p-8",children:[i.jsx("div",{className:"text-center mb-8",children:i.jsx("h3",{className:"text-2xl font-semibold text-white mb-3",children:"Innovation Pipeline"})}),i.jsxs("div",{className:"grid grid-cols-2 gap-8 max-w-4xl mx-auto",children:[i.jsxs("div",{className:"flex items-center justify-center space-x-4",children:[i.jsx("div",{className:"w-12 h-12 bg-gradient-to-br from-cyan-500/20 to-blue-500/20 rounded-lg flex items-center justify-center",children:i.jsx(qt,{className:"h-6 w-6 text-[#4ECDC4]"})}),i.jsxs("div",{children:[i.jsx("p",{className:"text-white font-medium",children:"Q3 2025: MCP v2.0"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"with enhanced compliance"})]})]}),i.jsxs("div",{className:"flex items-center justify-center space-x-4",children:[i.jsx("div",{className:"w-12 h-12 bg-gradient-to-br from-purple-500/20 to-pink-500/20 rounded-lg flex items-center justify-center",children:i.jsx(Un,{className:"h-6 w-6 text-[#7C8DB5]"})}),i.jsxs("div",{children:[i.jsx("p",{className:"text-white font-medium",children:"Q4 2025: Agent beta release"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Early access program"})]})]})]})]})]})]}),IA=({slideNumber:e})=>i.jsxs("div",{className:"deck-slide relative overflow-hidden bg-gradient-to-br from-[#0B1117] via-[#0F1823] to-[#0B1117]",children:[i.jsx("div",{className:"absolute inset-0 overflow-hidden pointer-events-none",children:i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-emerald-900/10 via-trans
9741parent to-cyan-900/10"})}),i.jsxs("div",{className:"relative z-10 h-full flex flex-col justify-center px-20",children:[i.jsxs("div",{className:"mb-12",children:[i.jsxs("div",{className:"inline-flex items-center px-4 py-2 rounded-full bg-emerald-500/10 border border-emerald-500/20 mb-6",children:[i.jsx(ur,{className:"h-5 w-5 mr-2 text-emerald-400"}),i.jsx("span",{className:"text-sm font-medium text-emerald-400 uppercase tracking-wide",children:"Democratizing Network Automation"})]}),i.jsx("h2",{className:"text-5xl font-bold text-white mb-4",children:"Selent MCP - Open Source Initiative"}),i.jsx("p",{className:"text-2xl text-gray-400",children:"Democratizing Network Automation"})]}),i.jsxs("div",{className:"grid grid-cols-2 gap-8 mb-12",children:[i.jsxs("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-8",children:[i.jsx("h3",{className:"text-2xl font-semibold text-white mb-6",children:"What is Selent MCP?"}),i.jsxs("div",{className:"space-y-4",children:[i.jsxs("div",{className:"flex items-start",children:[i.jsx(Pn,{className:"h-5 w-5 text-[#4ECDC4] mr-3 mt-0.5"}),i.jsxs("div",{children:[i.jsx("p",{className:"text-white font-medium",children:"Model Context Protocol Server"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Universal access to 400+ Cisco Meraki API endpoints"})]})]}),i.jsxs("div",{className:"flex items-start",children:[i.jsx(qg,{className:"h-5 w-5 text-emerald-400 mr-3 mt-0.5"}),i.jsxs("div",{children:[i.jsx("p",{className:"text-white font-medium",children:"No manual tool creation required"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Automatic API discovery and integration"})]})]}),i.jsxs("div",{className:"flex items-start",children:[i.jsx(at,{className:"h-5 w-5 text-[#7C8DB5] mr-3 mt-0.5"}),i.jsxs("div",{children:[i.jsx("p",{className:"text-white font-medium",children:"Natural language query support"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Docker-ready deployment"})]})]})]})]}),i.jsxs("div",{className:"bg-gradient-to-br from-emerald-500/10 to-cyan-500/10 rounded-xl border border-emerald-500/20 p-8",children:[i.jsx("h3",{className:"text-2xl font-semibold text-white mb-6",children:"Key Features"}),i.jsxs("div",{className:"space-y-4",children:[i.jsxs("div",{children:[i.jsx("h4",{className:"text-lg font-semibold text-white mb-2",children:"Dynamic API Discovery"}),i.jsxs("div",{className:"space-y-1 text-sm text-gray-400",children:[i.jsx("p",{children:"⢠Single-call optimization for common queries"}),i.jsx("p",{children:"⢠Intelligent endpoint search"}),i.jsx("p",{children:"⢠Automatic parameter validation"}),i.jsx("p",{children:"⢠Smart error handling"})]})]}),i.jsxs("div",{children:[i.jsx("h4",{className:"text-lg font-semibold text-white mb-2",children:"Enterprise Capabilities"}),i.jsxs("div",{className:"space-y-1 text-sm text-gray-400",children:[i.jsx("p",{children:"⢠Compliance auditing (PCI, HIPAA, SOC2)"}),i.jsx("p",{children:"⢠Backup & restore operations"}),i.jsx("p",{children:"⢠Security vulnerability scanning"}),i.jsx("p",{children:"⢠Network topology analysis"})]})]})]})]})]}),i.jsxs("div",{className:"bg-gradient-to-br from-cyan-500/10 to-emerald-500/10 rounded-xl border border-cyan-500/20 p-8",children:[i.jsx("h3",{className:"text-2xl font-semibold text-white mb-6",children:"Get Started"}),i.jsxs("div",{className:"grid grid-cols-2 gap-8",children:[i.jsxs("div",{children:[i.jsx("h4",{className:"text-lg font-medium text-white mb-4",children:"Quick Installation"}),i.jsx("div",{className:"bg-gray-900/50 rounded-lg p-4",children:i.jsxs("div",{className:"font-mono text-sm text-gray-300",children:[i.jsx("div",{className:"text-gray-500",children:"# Run with Docker"}),i.jsx("div",{className:"text-[#4ECDC4]",children:"docker run --pull=always \\"}),i.jsx("div",{className:"ml-4 text-emerald-400",children:"-e MERAKI_API_KEY=$KEY \\"}),i.jsx("div",{className:"ml-4 text-[#7C8DB5]",children:"selentai/selent-mcp:latest"})]})})]}),i.jsxs("div",{children:[i.jsx("h4",{className:"text-lg font-medium text-white mb-4",children:"Resources"}),i.jsxs("div",{className:"space-y-3",children:[i.jsxs("div",{className:"flex items-center space-x-3",children:[i.jsx(ur,{className:"h-5 w-5 text-gray-400"}),i.jsx("p",{className:"text-white",children:"github.com/selent-ai/selent-mcp"})]}),i.jsxs("div",{className:"flex items-center space-x-3",children:[i.jsx(qg,{className:"h-5 w-5 text-gray-400"}),i.jsx("p",{className:"text-gray-300",children:"Full documentation available"})]}),i.jsxs("div",{className:"flex items-center space-x-3",children:[i.jsx(Pn,{className:"h-5 w-5 text-gray-400"}),i.jsx("p",{className:"text-gray-300",children:"Claude Desktop compatible"})]})]})]})]})]})]})]}),jA=({slideNumber:e})=>i.jsxs("div",{className:"deck-slide relative overflow-hidden bg-gradient-to-br from-[#0B1117] via-[#0F1823] to-[#0B1117]",children:[i.jsxs("div",{className:"absolute inset-0 overflow-hidden pointer-events-none",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-purple-900/10 via-trans
9741parent to-pink-900/10"}),i.jsxs("div",{className:"absolute inset-0",children:[i.jsx("div",{className:"absolute top-1/5 left-1/5 w-32 h-32 bg-purple-500/5 rounded-full blur-3xl animate-pulse"}),i.jsx("div",{className:"absolute bottom-1/4 right-1/4 w-40 h-40 bg-pink-500/5 rounded-full blur-3xl animate-pulse delay-1000"})]})]}),i.jsxs("div",{className:"relative z-10 h-full flex flex-col justify-center px-20",children:[i.jsxs("div",{className:"mb-12",children:[i.jsxs("div",{className:"inline-flex items-center px-4 py-2 rounded-full bg-purple-500/10 border border-purple-500/20 mb-6",children:[i.jsx(Un,{className:"h-5 w-5 mr-2 text-[#7C8DB5]"}),i.jsx("span",{className:"text-sm font-medium text-[#7C8DB5] uppercase tracking-wide",children:"Coming Soon"})]}),i.jsx("h2",{className:"text-5xl font-bold text-white mb-4",children:"Selent Agent - The Future is Agentic"}),i.jsx("p",{className:"text-2xl text-gray-400",children:"Your AI Network Operations Assistant"})]}),i.jsxs("div",{className:"grid grid-cols-3 gap-8 mb-12",children:[i.jsxs("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-8",children:[i.jsxs("div",{className:"w-16 h-16 mb-6 relative",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-500/20 to-blue-500/20 rounded-lg blur-xl"}),i.jsx("div",{className:"relative bg-white/5 backdrop-blur-sm border border-white/10 rounded-lg w-full h-full flex items-center justify-center",children:i.jsx(Gc,{className:"h-8 w-8 text-[#4ECDC4]"})})]}),i.jsx("h3",{className:"text-xl font-semibold text-white mb-4",children:"Intelligent Interface"}),i.jsxs("div",{className:"space-y-2 text-gray-400 text-sm",children:[i.jsx("p",{children:"⢠Purpose-built UI for network management"}),i.jsx("p",{children:"⢠Natural conversation with your network"}),i.jsx("p",{children:"⢠Visual topology manipulation"}),i.jsx("p",{children:"⢠Real-time collaboration features"})]})]}),i.jsxs("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-8",children:[i.jsxs("div",{className:"w-16 h-16 mb-6 relative",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-emerald-500/20 to-green-500/20 rounded-lg blur-xl"}),i.jsx("div",{className:"relative bg-white/5 backdrop-blur-sm border border-white/10 rounded-lg w-full h-full flex items-center justify-center",children:i.jsx(xn,{className:"h-8 w-8 text-emerald-400"})})]}),i.jsx("h3",{className:"text-xl font-semibold text-white mb-4",children:"Autonomous Operations"}),i.jsxs("div",{className:"space-y-2 text-gray-400 text-sm",children:[i.jsx("p",{children:"⢠Self-healing network configurations"}),i.jsx("p",{children:"⢠Predictive maintenance scheduling"}),i.jsx("p",{children:"⢠Automatic optimization recommendations"}),i.jsx("p",{children:"⢠Proactive security threat mitigation"})]})]}),i.jsxs("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-8",children:[i.jsxs("div",{className:"w-16 h-16 mb-6 relative",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-purple-500/20 to-pink-500/20 rounded-lg blur-xl"}),i.jsx("div",{className:"relative bg-white/5 backdrop-blur-sm border border-white/10 rounded-lg w-full h-full flex items-center justify-center",children:i.jsx(ea,{className:"h-8 w-8 text-[#7C8DB5]"})})]}),i.jsx("h3",{className:"text-xl font-semibold text-white mb-4",children:"Advanced AI Features"}),i.jsxs("div",{className:"space-y-2 text-gray-400 text-sm",children:[i.jsx("p",{children:"⢠Multi-step problem resolution"}),i.jsx("p",{children:"⢠Context-aware suggestions"}),i.jsx("p",{children:"⢠Learning from your network patterns"}),i.jsx("p",{children:"⢠Custom automation creation"})]})]})]}),i.jsxs("div",{className:"bg-gradient-to-r from-purple-500/10 to-pink-500/10 rounded-xl border border-purple-500/20 p-8",children:[i.jsxs("div",{className:"flex items-center justify-between mb-8",children:[i.jsxs("div",{children:[i.jsx("h3",{className:"text-2xl font-semibold text-white mb-2",children:"Beta Program"}),i.jsx("p",{className:"text-gray-400",children:"Shape the future of network management AI"})]}),i.jsxs("div",{className:"text-right",children:[i.jsx("div",{className:"text-3xl font-bold text-purple-400 mb-1",children:"Q3 2025"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Launch Target"})]})]}),i.jsxs("div",{className:"grid grid-cols-3 gap-8",children:[i.jsxs("div",{className:"text-center",children:[i.jsx(qt,{className:"h-8 w-8 text-purple-400 mx-auto mb-3"}),i.jsx("h4",{className:"text-lg font-semibold text-white mb-2",children:"Launch"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"End of Q3 2025"})]}),i.jsxs("div",{className:"text-center",children:[i.jsx(b1,{className:"h-8 w-8 text-[#4ECDC4] mx-auto mb-3"}),i.jsx("h4",{className:"text-lg font-semibold text-white mb-2",children:"Early Access"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Limited spots available"})]}),i.jsxs("div",{className:"text-center",children:[i.jsx(oe,{className:"h-8 w-8 text-emerald-400 mx-auto mb-3"}),i.jsx("h4",{className:"text-lg font-semibold text-white mb-2",children:"Requirements"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"100+ Cisco Meraki devices"})]})]}),i.jsxs("div",{className:"mt-6 p-4 bg-white/5 rounded-lg",children:[i.jsx("h5",{className:"text-white font-medium mb-2",children:"Benefits:"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Shape product development, exclusive features, priority support"})]})]})]})]}),PA=({slideNumber:e})=>i.jsxs("div",{className:"deck-slide relative overflow-hidden bg-gradient-to-br from-[#0B1117] via-[#0F1823] to-[#0B1117]",children:[i.jsxs("div",{className:"absolute inset-0 overflow-hidden pointer-events-none",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-emerald-900/10 via-trans
9741parent to-cyan-900/10"}),i.jsxs("svg",{className:"absolute inset-0 w-full h-full opacity-[0.02]",children:[i.jsx("defs",{children:i.jsxs("pattern",{id:"cta-pattern",x:"0",y:"0",width:"300",height:"300",patternUnits:"userSpaceOnUse",children:[i.jsx("path",{d:"M 30 30 Q 120 30, 120 90 T 30 150",stroke:"#4ECDC4",strokeWidth:"3",fill:"none",opacity:"0.3"}),i.jsx("circle",{cx:"30",cy:"30",r:"6",fill:"#4ECDC4",opacity:"0.4"}),i.jsx("circle",{cx:"120",cy:"90",r:"6",fill:"#7C8DB5",opacity:"0.4"}),i.jsx("circle",{cx:"30",cy:"150",r:"6",fill:"#4ECDC4",opacity:"0.4"})]})}),i.jsx("rect",{width:"100%",height:"100%",fill:"url(#cta-pattern)"})]})]}),i.jsxs("div",{className:"relative z-10 h-full flex flex-col justify-center items-center text-center px-20",children:[i.jsxs("div",{className:"mb-16",children:[i.jsxs("h1",{className:"text-6xl font-bold text-white mb-8",children:["Ready to Transform Your",i.jsx("br",{}),i.jsx("span",{className:"text-[#4ECDC4]",children:"Cisco Meraki Network"}),"?"]}),i.jsx("p",{className:"text-2xl text-gray-400 max-w-3xl mx-auto leading-relaxed",children:"Transform your network operations with AI-powered automation"})]}),i.jsxs("div",{className:"grid grid-cols-3 gap-12 max-w-5xl mx-auto mb-16",children:[i.jsxs("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-8 text-center hover:bg-white/10 transition-all duration-300",children:[i.jsxs("div",{className:"w-20 h-20 mx-auto mb-6 relative",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-emerald-500/20 to-cyan-500/20 rounded-full blur-xl"}),i.jsx("div",{className:"relative bg-white/5 backdrop-blur-sm border border-white/10 rounded-full w-full h-full flex items-center justify-center",children:i.jsx(gn,{className:"h-10 w-10 text-emerald-400"})})]}),i.jsx("h3",{className:"text-xl font-semibold text-white mb-3",children:"Email Us"}),i.jsx("p",{className:"text-[#4ECDC4] font-mono text-lg",children:"[email protected]"}),i.jsx("p",{className:"text-gray-400 text-sm mt-2",children:"Get in touch for demos and pricing"})]}),i.jsxs("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-8 text-center hover:bg-white/10 transition-all duration-300",children:[i.jsxs("div",{className:"w-20 h-20 mx-auto mb-6 relative",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-cyan-500/20 to-blue-500/20 rounded-full blur-xl"}),i.jsx("div",{className:"relative bg-white/5 backdrop-blur-sm border border-white/10 rounded-full w-full h-full flex items-center justify-center",children:i.jsx(Hs,{className:"h-10 w-10 text-[#4ECDC4]"})})]}),i.jsx("h3",{className:"text-xl font-semibold text-white mb-3",children:"Visit Website"}),i.jsx("p",{className:"text-[#4ECDC4] font-mono text-lg",children:"selent.ai"}),i.jsx("p",{className:"text-gray-400 text-sm mt-2",children:"Learn more about our platform"})]}),i.jsxs("div",{className:"bg-white/5 backdrop-blur-sm border border-white/10 rounded-xl p-8 text-center hover:bg-white/10 transition-all duration-300",children:[i.jsxs("div",{className:"w-20 h-20 mx-auto mb-6 relative",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-purple-500/20 to-pink-500/20 rounded-full blur-xl"}),i.jsx("div",{className:"relative bg-white/5 backdrop-blur-sm border border-white/10 rounded-full w-full h-full flex items-center justify-center",children:i.jsx(ur,{className:"h-10 w-10 text-[#7C8DB5]"})})]}),i.jsx("h3",{className:"text-xl font-semibold text-white mb-3",children:"Open Source"}),i.jsx("p",{className:"text-[#7C8DB5] font-mono text-lg",children:"github.com/selent-ai"}),i.jsx("p",{className:"text-gray-400 text-sm mt-2",children:"Try our MCP server today"})]})]}),i.jsx("div",{className:"bg-gradient-to-r from-emerald-500/10 to-cyan-500/10 rounded-xl border border-emerald-500/20 p-8 max-w-4xl mx-auto",children:i.jsxs("div",{className:"flex items-center justify-center space-x-8",children:[i.jsxs("div",{className:"text-center",children:[i.jsx(uT,{className:"h-12 w-12 text-emerald-400 mx-auto mb-3"}),i.jsx("p",{className:"text-xl text-white font-semibold",children:"Ready to get started?"}),i.jsx("p",{className:"text-gray-400",children:"Book a personalized demo today"})]}),i.jsx("div",{className:"text-6xl text-gray-600",children:"â¢"}),i.jsxs("div",{className:"text-center",children:[i.jsx(ur,{className:"h-12 w-12 text-[#7C8DB5] mx-auto mb-3"}),i.jsx("p",{className:"text-xl text-white font-semibold",children:"Try it now"}),i.jsx("p",{className:"text-gray-400",children:"Download our open-source MCP"})]})]})})]})]}),qn=[{id:"title",component:yA,name:"Title Slide",description:"AI-Powered Network Operations for Cisco Meraki"},{id:"problem",component:bA,name:"The Hidden Cost of Network Management",description:"Enterprise teams spend 70% of their time on manual configuration tasks"},{id:"solution",component:vA,name:"Introducing Selent",description:"The only AI-powered platform purpose-built for Cisco Meraki networks"},{id:"incident-remediation",component:kA,name:"Core Feature - Incident Remediation",description:"From disaster to operational in minutes, not hours"},{id:"ai-analysis",component:wA,name:"Intelligent Change Analysis",description:"AI explains configuration changes in plain English, instantly"},{id:"demo",component:AA,name:"Demo time!",description:"See Selent's AI-powered network management in action"},{id:"tool-suite",component:CA,name:"Tool Suite Overview",description:"Complete Network Management Platform"},{id:"compliance-audit",component:EA,name:"AI-Powered Compliance Audit (Preview)",description:"Pass any audit with confidence"},{id:"switch-port-manager",component:NA,name:"Switch Port Manager",description:"Streamline complex switch operations"},{id:"tag-management",component:TA,name:"Tag Management System",description:"Organize. Standardize. Automate."},{id:"rnd-lab",component:SA,name:"R&D Innovation Lab",description:"Building the Future of Network Management"},{id:"mcp-details",component:IA,name:"Selent MCP - Open Source Revolution",description:"Democratizing Network Automation"},{id:"agent-preview",component:jA,name:"Selent Agent - The Future is Agentic",de
9741scription:"Your AI Network Operations Assistant"},{id:"cta",component:PA,name:"Call to Action",description:"Ready to Transform Your Cisco Meraki Network?"}],S9=({startSlide:e=0})=>{const[t,n]=T.useState(e),[a,r]=T.useState(!1),s=T.useRef(null),o=()=>{n(p=>(p+1)%qn.length)},l=()=>{n(p=>(p-1+qn.length)%qn.length)},c=p=>{n(p)},u=()=>{n(0)},d=async()=>{var p;document.fullscreenElement?(await document.exitFullscreen(),r(!1)):(await((p=s.current)==null?void 0:p.requestFullscreen()),r(!0))};T.useEffect(()=>{const p=f=>{if(f.key==="ArrowRight"||f.key===" ")f.preventDefault(),o();else if(f.key==="ArrowLeft")f.preventDefault(),l();else if(f.key==="Home")f.preventDefault(),u();else if(f.key==="End")f.preventDefault(),c(qn.length-1);else if(f.key==="f"||f.key==="F")f.preventDefault(),d();else if(f.key==="Escape"&&a)r(!1);else if(f.key>="1"&&f.key<="9"){const g=parseInt(f.key)-1;g<qn.length&&c(g)}};return window.addEventListener("keydown",p),()=>window.removeEventListener("keydown",p)},[t,a]),T.useEffect(()=>{const p=()=>{r(!!document.fullscreenElement)};return document.addEventListener("fullscreenchange",p),()=>document.removeEventListener("fullscreenchange",p)},[]);const m=qn[t].component;return i.jsxs("div",{ref:s,className:"w-full h-screen bg-black overflow-hidden relative",children:[i.jsx("div",{className:"w-full h-full flex items-center justify-center",children:i.jsx("div",{style:{width:"100%",height:"100%",display:"flex",alignItems:"center",justifyContent:"center",transform:"scale(0.8)",transformOrigin:"center center"},children:i.jsx(m,{slideNumber:t+1})})}),!a&&i.jsx("div",{className:"absolute top-4 right-4 z-50",children:i.jsxs("div",{className:"flex items-center gap-2 bg-black/50 backdrop-blur-sm rounded-lg p-2",children:[i.jsx("button",{onClick:u,className:"p-2 rounded-md bg-gray-800/50 hover:bg-gray-700/50 text-white transition-colors",title:"Reset to first slide",children:i.jsx(g1,{className:"h-4 w-4"})}),i.jsx("button",{onClick:l,disabled:t===0,className:"p-2 rounded-md bg-gray-800/50 hover:bg-gray-700/50 text-white transition-colors disabled:opacity-50 disabled:cursor-not-allowed",title:"Previous slide",children:i.jsx(fh,{className:"h-4 w-4"})}),i.jsxs("span",{className:"px-3 py-1 text-white text-sm font-medium",children:[t+1," / ",qn.length]}),i.jsx("button",{onClick:o,disabled:t===qn.length-1,className:"p-2 rounded-md bg-gray-800/50 hover:bg-gray-700/50 text-white transition-colors disabled:opacity-50 disabled:cursor-not-allowed",title:"Next slide",children:i.jsx(gh,{className:"h-4 w-4"})}),i.jsx("div",{className:"w-px h-6 bg-gray-600"}),i.jsx("button",{onClick:d,className:"p-2 rounded-md bg-gray-800/50 hover:bg-gray-700/50 text-white transition-colors",title:"Toggle fullscreen (F)",children:a?i.jsx(dT,{className:"h-4 w-4"}):i.jsx(lT,{className:"h-4 w-4"})})]})}),!a&&i.jsx("div",{className:"absolute bottom-4 left-1/2 transform -translate-x-1/2 z-50",children:i.jsx("div",{className:"flex items-center gap-2 bg-black/50 backdrop-blur-sm rounded-lg p-3 max-w-screen-xl overflow-x-auto",children:qn.map((p,f)=>i.jsxs("button",{onClick:()=>c(f),className:`flex-shrink-0 px-3 py-1 rounded-md text-xs font-medium transition-colors ${t===f?"bg-[#4ECDC4] text-black":"bg-gray-800/50 hover:bg-gray-700/50 text-white"}`,title:p.description,children:[f+1,". ",p.name]},p.id))})}),!a&&i.jsx("div",{className:"absolute bottom-4 right-4 z-50",children:i.jsxs("div",{className:"bg-black/50 backdrop-blur-sm rounded-lg px-4 py-2 text-gray-400 text-sm",children:["Press"," ",i.jsx("kbd",{className:"px-2 py-1 bg-gray-700 rounded text-white",children:"F"})," ","for fullscreen"]})})]})},I9=({slideNumber:e})=>i.jsxs("div",{className:"deck-slide relative overflow-hidden bg-gradient-to-br from-[#0B1117] via-[#0F1823] to-[#0B1117]",children:[i.jsx("div",{className:"absolute inset-0 overflow-hidden pointer-events-none",children:i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-emerald-900/10 via-trans
9741parent to-cyan-900/10"})}),i.jsxs("div",{className:"relative z-10 h-full flex flex-col justify-center px-20",children:[i.jsxs("div",{className:"text-center mb-16",children:[i.jsxs("div",{className:"inline-flex items-center px-4 py-2 rounded-full bg-emerald-500/10 border border-emerald-500/20 mb-6",children:[i.jsx(y1,{className:"h-5 w-5 mr-2 text-emerald-400"}),i.jsx("span",{className:"text-sm font-medium text-emerald-400 uppercase tracking-wide",children:"ROI & Benefits"})]}),i.jsx("h2",{className:"text-5xl font-bold text-white mb-4",children:"Measurable Business Impact"}),i.jsx("p",{className:"text-2xl text-gray-400",children:"Transform your network operations with proven results"})]}),i.jsxs("div",{className:"grid grid-cols-3 gap-8 mb-12",children:[i.jsxs("div",{className:"bg-gradient-to-br from-cyan-500/10 to-cyan-500/5 rounded-xl border border-cyan-500/20 p-8 text-center",children:[i.jsx(za,{className:"h-12 w-12 text-[#4ECDC4] mx-auto mb-4"}),i.jsx("div",{className:"text-5xl font-bold text-[#4ECDC4] mb-3",children:"85%"}),i.jsx("h3",{className:"text-xl font-semibold text-white mb-2",children:"Time Reduction"}),i.jsx("p",{className:"text-gray-400",children:"In configuration management tasks"})]}),i.jsxs("div",{className:"bg-gradient-to-br from-emerald-500/10 to-emerald-500/5 rounded-xl border border-emerald-500/20 p-8 text-center",children:[i.jsx(xh,{className:"h-12 w-12 text-emerald-400 mx-auto mb-4"}),i.jsx("div",{className:"text-5xl font-bold text-emerald-400 mb-3",children:"300%"}),i.jsx("h3",{className:"text-xl font-semibold text-white mb-2",children:"ROI"}),i.jsx("p",{className:"text-gray-400",children:"Within first 12 months"})]}),i.jsxs("div",{className:"bg-gradient-to-br from-purple-500/10 to-purple-500/5 rounded-xl border border-purple-500/20 p-8 text-center",children:[i.jsx(qe,{className:"h-12 w-12 text-[#7C8DB5] mx-auto mb-4"}),i.jsx("div",{className:"text-5xl font-bold text-[#7C8DB5] mb-3",children:"95%"}),i.jsx("h3",{className:"text-xl font-semibold text-white mb-2",children:"Risk Reduction"}),i.jsx("p",{className:"text-gray-400",children:"In configuration-related outages"})]})]}),i.jsxs("div",{className:"grid grid-cols-2 gap-8",children:[i.jsxs("div",{className:"space-y-4",children:[i.jsx("h3",{className:"text-2xl font-semibold text-white mb-4",children:"Operational Excellence"}),i.jsxs("div",{className:"flex items-start space-x-3",children:[i.jsx("div",{className:"text-emerald-400 mt-1",children:"â"}),i.jsxs("div",{children:[i.jsx("p",{className:"text-white font-medium",children:"50% faster incident resolution"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Find and fix issues in minutes, not hours"})]})]}),i.jsxs("div",{className:"flex items-start space-x-3",children:[i.jsx("div",{className:"text-emerald-400 mt-1",children:"â"}),i.jsxs("div",{children:[i.jsx("p",{className:"text-white font-medium",children:"Zero configuration drift"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Maintain consistency across all devices"})]})]}),i.jsxs("div",{className:"flex items-start space-x-3",children:[i.jsx("div",{className:"text-emerald-400 mt-1",children:"â"}),i.jsxs("div",{children:[i.jsx("p",{className:"text-white font-medium",children:"Proactive issue prevention"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"AI identifies risks before they impact users"})]})]})]}),i.jsxs("div",{className:"space-y-4",children:[i.jsx("h3",{className:"text-2xl font-semibold text-white mb-4",children:"Business Value"}),i.jsxs("div",{className:"flex items-start space-x-3",children:[i.jsx("div",{className:"text-emerald-400 mt-1",children:"â"}),i.jsxs("div",{children:[i.jsx("p",{className:"text-white font-medium",children:"$2.5M annual savings"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Average for 1000+ device networks"})]})]}),i.jsxs("div",{className:"flex items-start space-x-3",children:[i.jsx("div",{className:"text-emerald-400 mt-1",children:"â"}),i.jsxs("div",{children:[i.jsx("p",{className:"text-white font-medium",children:"Improved team productivity"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Focus on strategic initiatives, not manual tasks"})]})]}),i.jsxs("div",{className:"flex items-start space-x-3",children:[i.jsx("div",{className:"text-emerald-400 mt-1",children:"â"}),i.jsxs("div",{children:[i.jsx("p",{className:"text-white font-medium",children:"Enhanced compliance posture"}),i.jsx("p",{className:"text-gray-400 text-sm",children:"Pass audits with automated documentation"})]})]})]})]}),i.jsxs("div",{className:"mt-12 bg-gradient-to-r from-emerald-500/10 to-cyan-500/10 rounded-xl border border-emerald-500/20 p-6 text-center",children:[i.jsx("p",{className:"text-xl text-white italic",children:'"Selent paid for itself in the first month by preventing a single outage"'}),i.jsx("p",{className:"text-gray-400 mt-2",children:"- Enterprise Network Manager, Fortune 500"})]})]})]}),j9=({className:e=""})=>i.jsxs("div",{className:`relative w-[1280px] h-[720px] bg-dark-base ${e}`,style:{overflow:"hidden"},children:[i.jsx(pe,{opacity:.03}),i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-accent-cyan/10 via-dark-base to-accent-purple/10"}),i.jsxs("div",{className:"relative z-10 flex flex-col items-center justify-center h-full px-16 py-16 text-center",children:[i.jsxs(M.div,{initial:{opacity:0,scale:.8}
9741,animate:{opacity:1,scale:1},transition:{duration:.8},className:"mb-12",children:[i.jsx("img",{src:"/logo_white.png",alt:"Selent",className:"h-20 mb-6"}),i.jsx("div",{className:"w-24 h-0.5 bg-gradient-to-r from-accent-cyan to-accent-purple mx-auto"})]}),i.jsxs(M.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.8,delay:.2},className:"max-w-4xl mb-12",children:[i.jsxs("h2",{className:"text-4xl lg:text-5xl font-bold text-white mb-8 leading-tight",children:["AI-Powered Management for",i.jsx("span",{className:"block text-transparent bg-clip-text bg-gradient-to-r from-accent-cyan to-accent-purple mt-3",children:"Cisco Meraki Networks"})]}),i.jsx("p",{className:"text-lg text-gray-300 leading-relaxed max-w-3xl mx-auto",children:"Designed specifically for Cisco Meraki infrastructure. Automates backups, analyzes changes and searches configurations across MX, MS, MR and MV devices."})]}),i.jsxs(M.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.8,delay:.4},className:"flex items-center justify-center gap-12",children:[i.jsx("a",{href:"https://marketplace.cisco.com/en-US/apps/502978/selentai",target:"_blank",rel:"noopener noreferrer",children:i.jsx("img",{src:"/cisco-meraki-partner.webp",alt:"Cisco Meraki Technology Partner",className:"h-12 opacity-90 hover:opacity-100 transition-opacity"})}),i.jsx("a",{href:"https://marketplace.cisco.com/en-US/apps/502978/selentai",target:"_blank",rel:"noopener noreferrer",children:i.jsx("img",{src:"/cisco-meraki-select-developer.webp",alt:"Cisco Select Developer",className:"h-12 opacity-90 hover:opacity-100 transition-opacity"})})]}),i.jsx(M.div,{initial:{opacity:0}
9741,animate:{opacity:1},transition:{duration:.8,delay:.6},className:"absolute bottom-6 text-gray-500 text-xs",children:i.jsxs("p",{children:["Confidential and Proprietary ⢠",new Date().getFullYear()]})})]}),i.jsx("div",{className:"absolute top-16 right-16 w-48 h-48 bg-gradient-to-br from-accent-cyan/10 to-accent-purple/10 rounded-full blur-3xl"}),i.jsx("div",{className:"absolute bottom-16 left-16 w-32 h-32 bg-gradient-to-br from-accent-purple/10 to-accent-cyan/10 rounded-full blur-2xl"})]}),P9=({className:e=""})=>{const t=[{icon:za,title:"Operational Inefficiency",description:"Manual backup processes at scale",impact:"83 hours per 500 devices",color:"from-red-500 to-orange-500"},{icon:p1,title:"Limited Recovery Options",description:"No granular restore capability",impact:"500+ hours to restore",color:"from-orange-500 to-yellow-500"},{icon:Zn,title:"Audit Gap",description:"No version control or change tracking",impact:"Zero compliance visibility",color:"from-yellow-500 to-red-500"}];return i.jsxs("div",{className:`relative w-[1280px] h-[720px] bg-dark-base ${e}`,style:{overflow:"hidden"},children:[i.jsx(pe,{opacity:.02}),i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-red-900/10 via-dark-base to-orange-900/10"}),i.jsxs("div",{className:"relative z-10 h-full flex flex-col justify-center px-16 py-16",children:[i.jsxs(M.div,{initial:{opacity:0,y:-20},animate:{opacity:1,y:0},transition:{duration:.6},className:"mb-12 text-center",children:[i.jsx("h1",{className:"text-3xl font-bold text-white mb-3",children:"Current Limitations"}),i.jsx("p",{className:"text-base text-gray-300 max-w-2xl mx-auto",children:"Cisco Meraki configuration management at enterprise scale"})]}),i.jsx("div",{className:"grid grid-cols-3 gap-10 max-w-6xl mx-auto",children:t.map((n,a)=>i.jsxs(M.div,{initial:{opacity:0,y:30},animate:{opacity:1,y:0},transition:{duration:.6,delay:a*.15},className:"relative group",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-red-500/10 to-orange-500/10 rounded-xl blur-2xl opacity-0 group-hover:opacity-100 transition-all duration-300"}),i.jsxs("div",{className:"relative glass-card p-6 h-full flex flex-col border-red-500/20 hover:border-red-500/40 transition-all duration-300 hover:transform hover:scale-105",children:[i.jsx("div",{className:"mb-4",children:i.jsx("div",{className:`w-12 h-12 rounded-xl bg-gradient-to-br ${n.color} p-0.5`,children:i.jsx("div",{className:"w-full h-full bg-dark-base rounded-xl flex items-center justify-center",children:i.jsx(n.icon,{className:"w-6 h-6 text-white"})})})}),i.jsx("h3",{className:"text-base font-semibold text-white mb-2",children:n.title}),i.jsx("p",{className:"text-sm text-gray-400 mb-4 flex-grow",children:n.description}),i.jsx("div",{className:"pt-3 border-t border-red-500/20",children:i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("div",{className:"w-2 h-2 bg-gradient-to-r from-red-500 to-orange-500 rounded-full animate-pulse"}),i.jsx("span",{className:"text-sm font-bold text-transparent bg-clip-text bg-gradient-to-r from-red-400 to-orange-400",children:n.impact})]})})]})]},a))})]}),i.jsx("div",{className:"absolute bottom-8 right-12 text-gray-500",children:"2"})]})},M9=({className:e=""})=>i.jsxs("div",{className:`relative w-[1280px] h-[720px] bg-dark-base ${e}`,style:{overflow:"hidden"},children:[i.jsx(pe,{opacity:.03}),i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-accent-cyan/10 via-dark-base to-accent-purple/10"}),i.jsx("div",{className:"relative z-10 h-full px-16 py-16",children:i.jsxs("div",{className:"grid grid-cols-2 gap-16 h-full",children:[i.jsx("div",{className:"flex items-center",children:i.jsxs(M.div,{initial:{opacity:0,x:-50},animate:{opacity:1,x:0},transition:{duration:.8},className:"w-full",children:[i.jsxs("div",{className:"mb-8",children:[i.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-2 glass-card rounded-full mb-6 border-accent-cyan/30",children:[i.jsx(tt,{className:"w-4 h-4 text-accent-cyan"}),i.jsx("span",{className:"text-sm text-accent-cyan font-medium",children:"Cisco Technology Partner"})]}),i.jsxs("h1",{className:"text-4xl lg:text-5xl font-bold text-white mb-6 leading-tight",children:["Selent Suite",i.jsx("span",{className:"block text-transparent bg-clip-text bg-gradient-to-r from-accent-cyan to-accent-purple text-5xl lg:text-6xl mt-3",children:"Enterprise Platform"})]}),i.jsx("p",{className:"text-base text-gray-300 leading-relaxed max-w-lg",children:"Configuration management and compliance platform designed for Cisco Meraki deployments at scale."})]}),i.jsxs("div",{className:"space-y-5",children:[i.jsxs(M.div,{initial:{opacity:0,x:-20}
9741,animate:{opacity:1,x:0},transition:{duration:.6,delay:.3},className:"flex items-center gap-4 group",children:[i.jsx("div",{className:"w-12 h-12 rounded-xl bg-gradient-to-br from-accent-cyan to-accent-purple p-0.5 group-hover:scale-110 transition-transform",children:i.jsx("div",{className:"w-full h-full bg-dark-base rounded-xl flex items-center justify-center",children:i.jsx(Un,{className:"w-6 h-6 text-accent-cyan"})})}),i.jsx("span",{className:"text-base text-white",children:"Automated Backup and Restore"})]}),i.jsxs(M.div,{initial:{opacity:0,x:-20},animate:{opacity:1,x:0},transition:{duration:.6,delay:.4},className:"flex items-center gap-4 group",children:[i.jsx("div",{className:"w-12 h-12 rounded-xl bg-gradient-to-br from-accent-purple to-accent-cyan p-0.5 group-hover:scale-110 transition-transform",children:i.jsx("div",{className:"w-full h-full bg-dark-base rounded-xl flex items-center justify-center",children:i.jsx(qe,{className:"w-6 h-6 text-accent-purple"})})}),i.jsx("span",{className:"text-base text-white",children:"Compliance Automation"})]}),i.jsxs(M.div,{initial:{opacity:0,x:-20},animate:{opacity:1,x:0},transition:{duration:.6,delay:.5},className:"flex items-center gap-4 group",children:[i.jsx("div",{className:"w-12 h-12 rounded-xl bg-gradient-to-br from-accent-cyan to-accent-purple p-0.5 group-hover:scale-110 transition-transform",children:i.jsx("div",{className:"w-full h-full bg-dark-base rounded-xl flex items-center justify-center",children:i.jsx(xn,{className:"w-6 h-6 text-accent-cyan"})})}),i.jsx("span",{className:"text-base text-white",children:"Artificial Intelligence"})]})]})]})}),i.jsx("div",{className:"flex items-center justify-center h-full",children:i.jsx(M.div,{initial:{opacity:0,scale:.9},animate:{opacity:1,scale:1},transition:{duration:1,delay:.2},className:"w-full h-[520px]",children:i.jsx(xA,{className:"w-full h-full"})})})]})}),i.jsx("div",{className:"absolute bottom-8 right-12 text-gray-500",children:"3"})]}),D9=({className:e=""})=>{const t=[{icon:ta,title:"Configuration Backup",description:"Automated daily snapshots, version control",benefits:["360-day retention","Granular restore"],gradient:"from-blue-500 to-cyan-500"},{icon:ea,title:"Change Intelligence",description:"AI-powered configuration comparison",benefits:["Semantic search","Diff analysis"],gradient:"from-purple-500 to-pink-500"},{icon:at,title:"Compliance Engine",description:"Industry standard validation",benefits:["PCI/HIPAA/SOC2","Custom policies"],gradient:"from-cyan-500 to-teal-500"},{icon:qe,title:"Multi-Organization Support",description:"Management for MSPs and enterprises",benefits:["Centralized control","Role-based access"],gradient:"from-green-500 to-emerald-500"}];return i.jsxs("div",{className:`relative w-[1280px] h-[720px] bg-dark-base ${e}`,style:{overflow:"hidden"},children:[i.jsx(pe,{opacity:.02}),i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-accent-cyan/5 via-dark-base to-accent-purple/5"}),i.jsxs("div",{className:"relative z-10 h-full flex flex-col px-16 py-12",children:[i.jsxs(M.div,{initial:{opacity:0,y:-20},animate:{opacity:1,y:0},transition:{duration:.6},className:"mb-8 text-center",children:[i.jsx("h1",{className:"text-3xl font-bold text-white mb-3",children:"Core Capabilities"}),i.jsx("p",{className:"text-base text-gray-300 max-w-2xl mx-auto",children:"Comprehensive configuration management for Cisco Meraki"})]}),i.jsx("div",{className:"grid grid-cols-2 gap-6 max-w-5xl mx-auto",children:t.map((n,a)=>i.jsxs(M.div,{initial:{opacity:0,scale:.95},animate:{opacity:1,scale:1},transition:{duration:.6,delay:a*.15},className:"group relative",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-accent-cyan/10 to-accent-purple/10 rounded-xl blur-2xl opacity-0 group-hover:opacity-100 transition-all duration-300"}),i.jsxs("div",{className:"relative glass-card p-5 h-full flex flex-col hover:border-accent-cyan/40 transition-all duration-300 hover:transform hover:scale-105",children:[i.jsx("div",{className:`w-10 h-10 rounded-lg bg-gradient-to-br ${n.gradient} p-0.5 mb-3`,children:i.jsx("div",{className:"w-full h-full bg-dark-base rounded-lg flex items-center justify-center",children:i.jsx(n.icon,{className:"w-5 h-5 text-white"})})}),i.jsx("h3",{className:"text-base font-semibold text-white mb-2",children:n.title}),i.jsx("p",{className:"text-xs text-gray-400 mb-3 leading-relaxed",children:n.description}),i.jsx("div",{className:"space-y-1.5 pt-3 border-t border-gray-800 mt-auto",children:n.benefits.map((r,s)=>i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("div",{className:"w-1.5 h-1.5 bg-gradient-to-r from-accent-cyan to-accent-purple roun
9741ded-full flex-shrink-0"}),i.jsx("span",{className:"text-xs text-gray-300",children:r})]},s))})]})]},a))})]}),i.jsx("div",{className:"absolute bottom-8 right-12 text-gray-500",children:"4"})]})},R9=({className:e=""})=>{const t=[{icon:h1,title:"API Connection",description:"Secure authentication with your Cisco Meraki dashboard",details:"Read-only access ensures zero risk to your infrastructure"},{icon:ta,title:"Automated Backup",description:"Continuous capture and storage of configurations",details:"Daily snapshots with historical versioning"},{icon:oe,title:"Operational Value",description:"Immediate access to advanced capabilities",details:"Instant restore, AI analysis and compliance monitoring"}];return i.jsxs("div",{className:`relative w-[1280px] h-[720px] bg-dark-base ${e}`,style:{overflow:"hidden"},children:[i.jsx(pe,{opacity:.02}),i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-accent-cyan/5 via-dark-base to-accent-purple/5"}),i.jsxs("div",{className:"relative z-10 h-full flex flex-col px-16 py-12",children:[i.jsxs(M.div,{initial:{opacity:0,y:-20},animate:{opacity:1,y:0},transition:{duration:.6},className:"mb-10 text-center",children:[i.jsx("h1",{className:"text-2xl font-bold text-white mb-2",children:"Implementation Process"}),i.jsx("p",{className:"text-sm text-gray-300",children:"Simple three-step deployment with immediate value"})]}),i.jsx("div",{className:"flex-1 flex items-center justify-center",children:i.jsx("div",{className:"flex items-center gap-8 max-w-5xl",children:t.map((n,a)=>i.jsxs(Et.Fragment,{children:[i.jsx(M.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.5,delay:a*.2},className:"flex-1",children:i.jsxs("div",{className:"glass-card p-6 h-full hover:border-accent-cyan/40 transition-all",children:[i.jsxs("div",{className:"flex items-center justify-between mb-4",children:[i.jsx("div",{className:"w-8 h-8 rounded-full bg-gradient-to-br from-accent-cyan to-accent-purple flex items-center justify-center",children:i.jsx("span",{className:"text-white font-bold text-sm",children:a+1})}),i.jsx(n.icon,{className:"w-6 h-6 text-accent-cyan"})]}),i.jsx("h3",{className:"text-base font-semibold text-white mb-2",children:n.title}),i.jsx("p",{className:"text-sm text-gray-300 mb-3",children:n.description}),i.jsx("p",{className:"text-xs text-gray-400",children:n.details})]})}),a<t.length-1&&i.jsx(M.div,{initial:{opacity:0,scale:0},animate:{opacity:1,scale:1},transition:{duration:.5,delay:a*.2+.3},children:i.jsx(ut,{className:"w-6 h-6 text-accent-cyan"})})]},a))})}),i.jsx(M.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.6,delay:.8},className:"mt-8 text-center",children:i.jsx("div",{className:"inline-flex items-center gap-4 px-5 py-2.5 glass-card rounded-full border-accent-cyan/30",children:i.jsx("span",{className:"text-sm text-accent-cyan font-medium",children:"Deploy in less than 5 minutes ⢠No professional services required"})})})]}),i.jsx("div",{className:"absolute bottom-8 right-12 text-gray-500",children:"5"})]})},O9=({className:e=""})=>{const t=[{value:"83hrs â 6min",label:"Basic Config",description:"Time for 500 devices",icon:xn,color:"text-accent-cyan"},{value:"500hrs â 12min",label:"Complex Config",description:"Enterprise deployment time",icon:xh,color:"text-green-400"},{value:"1,500hrs â 16min",label:"Full Restore",description:"Complete network recovery",icon:qe,color:"text-accent-purple"},{value:"93%",label:"Time Savings",description:"Average operational efficiency gain",icon:za,color:"text-blue-400"}],n=[{category:"Operational Impact",items:["Automated configuration deployment","Version control for all changes"]},{category:"Risk Reduction",items:["Zero-downtime rollback","Continuous compliance validation"]},{category:"Cost Efficiency",items:["70% reduction in operational costs","Elimination of manual backup processes"]}];return i.jsxs("div",{className:`relative w-[1280px] h-[720px] bg-dark-base ${e}`,style:{overflow:"hidden"},children:[i.jsx(pe,{opacity:.02}),i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-green-900/10 via-dark-base to-blue-900/10"}),i.jsxs("div",{className:"relative z-10 h-full flex flex-col px-16 py-12",children:[i.jsxs(M.div,{initial:{opacity:0,y:-20}
9741,animate:{opacity:1,y:0},transition:{duration:.6},className:"mb-6 text-center",children:[i.jsx("h1",{className:"text-2xl font-bold text-white mb-2",children:"Time to Value"}),i.jsx("p",{className:"text-sm text-gray-300",children:"Manual vs. Selent: comparison for 500 devices"})]}),i.jsx("div",{className:"grid grid-cols-4 gap-4 mb-6",children:t.map((a,r)=>i.jsx(M.div,{initial:{opacity:0,scale:.9},animate:{opacity:1,scale:1},transition:{duration:.5,delay:r*.1},className:"text-center",children:i.jsxs("div",{className:"glass-card p-3 h-full border-accent-cyan/20 hover:border-accent-cyan/40 transition-all",children:[i.jsx(a.icon,{className:`w-6 h-6 ${a.color} mx-auto mb-2`}),i.jsx("div",{className:`text-xl font-bold ${a.color} mb-1`,children:a.value}),i.jsx("div",{className:"text-sm font-semibold text-white mb-1",children:a.label}),i.jsx("p",{className:"text-xs text-gray-400 line-clamp-2",children:a.description})]})},r))}),i.jsx("div",{className:"flex-1 grid grid-cols-3 gap-4",children:n.map((a,r)=>i.jsx(M.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.5,delay:.4+r*.1},children:i.jsxs("div",{className:"glass-card p-4 h-full",children:[i.jsx("h3",{className:"text-sm font-semibold text-accent-cyan mb-3",children:a.category}),i.jsx("ul",{className:"space-y-2",children:a.items.slice(0,2).map((s,o)=>i.jsxs("li",{className:"flex items-start gap-2",children:[i.jsx("div",{className:"w-4 h-4 rounded-full bg-gradient-to-br from-accent-cyan to-accent-purple p-0.5 flex-shrink-0 mt-0.5",children:i.jsx("div",{className:"w-full h-full bg-dark-base rounded-full flex items-center justify-center",children:i.jsx("div",{className:"w-1.5 h-1.5 bg-accent-cyan rounded-full"})})}),i.jsx("span",{className:"text-xs text-gray-300",children:s})]},o))})]})},r))})]}),i.jsx("div",{className:"absolute bottom-8 right-12 text-gray-500",children:"6"})]})},_9=({className:e=""})=>i.jsxs("div",{className:`relative w-[1280px] h-[720px] bg-dark-base ${e}`,style:{overflow:"hidden"},children:[i.jsxs("div",{className:"absolute inset-0",children:[i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-accent-cyan/20 via-dark-base to-accent-purple/20 animate-gradient-shift"}),i.jsx(M.div,{animate:{x:[0,100,0],y:[0,-50,0]},transition:{duration:20,repeat:1/0,ease:"linear"},className:"absolute top-1/4 left-1/4 w-96 h-96 bg-accent-cyan/20 rounded-full blur-3xl"}),i.jsx(M.div,{animate:{x:[0,-100,0],y:[0,50,0]},transition:{duration:15,repeat:1/0,ease:"linear"},className:"absolute bottom-1/4 right-1/4 w-96 h-96 bg-accent-purple/20 rounded-full blur-3xl"})]}),i.jsx("div",{className:"relative z-10 h-full flex items-center justify-center",children:i.jsxs(M.div,{initial:{opacity:0,scale:.5},animate:{opacity:1,scale:1},transition:{duration:1.2,ease:[.23,1,.32,1]},children:[i.jsx(M.h1,{className:"text-8xl lg:text-9xl font-bold",animate:{backgroundPosition:["0% 50%","100% 50%","0% 50%"]},transition:{duration:5,repeat:1/0,ease:"linear"},style:{backgroundImage:"linear-gradient(90deg, #4ECDC4, #7C8DB5, #4ECDC4)",backgroundSize:"200% 100%",WebkitBackgroundClip:"text",backgroundClip:"text",WebkitTextFillColor:"transparent",textShadow:"0 0 80px rgba(78, 205, 196, 0.5)"},children:"DEMO"}),i.jsx(M.div,{className:"absolute inset-0 -z-10",animate:{opacity:[.3,.6,.3],scale:[.9,1.1,.9]},transition:{duration:3,repeat:1/0,ease:"easeInOut"},children:i.jsx("div",{className:"w-full h-full bg-gradient-to-r from-accent-cyan/30 to-accent-purple/30 blur-3xl"})})]})}),i.jsx("div",{className:"absolute bottom-8 right-12 text-gray-500",children:"7"})]}),L9=({className:e=""})=>{const t=[{name:"Professional",price:"$1.80",period:"/device/month",description:"Core platform capabilities",features:["Automated daily backups","180-day retention","Version control system","Standard support SLA"],icon:xn,gradient:"from-blue-500 to-cyan-500",popular:!1},{name:"Enterprise",price:"Custom",period:"volume pricing",description:"Full platform access",features:["All Professional features","AI-powered change analysis","Compliance automation","Dedicated success manager","API and webhook access"],icon:ro,gradient:"from-
9741accent-cyan to-accent-purple",popular:!0},{name:"Add-ons",price:"Variable",period:"per use case",description:"Enhance your deployment",features:["Multi-tenant support","White-label options for MSPs","AI Compliance Agent"],icon:x1,gradient:"from-purple-500 to-pink-500",popular:!1}];return i.jsxs("div",{className:`relative w-[1280px] h-[720px] bg-dark-base ${e}`,style:{overflow:"hidden"},children:[i.jsx(pe,{opacity:.02}),i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-accent-cyan/5 via-dark-base to-accent-purple/5"}),i.jsxs("div",{className:"relative z-10 h-full flex flex-col px-16 py-12",children:[i.jsxs(M.div,{initial:{opacity:0,y:-20},animate:{opacity:1,y:0},transition:{duration:.6},className:"mb-8 text-center",children:[i.jsx("h1",{className:"text-2xl font-bold text-white mb-2",children:"Investment Options"}),i.jsx("p",{className:"text-sm text-gray-300",children:"Flexible pricing aligned with your deployment scale"})]}),i.jsx("div",{className:"flex-1 grid grid-cols-3 gap-4 overflow-hidden",children:t.map((n,a)=>i.jsx(M.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.5,delay:a*.1},className:"relative",children:i.jsxs("div",{className:`glass-card p-5 h-full flex flex-col ${n.popular?"border-accent-cyan/50 shadow-2xl shadow-accent-cyan/10":"border-gray-800/50"}`,children:[i.jsx("div",{className:`w-10 h-10 rounded-lg bg-gradient-to-br ${n.gradient} p-0.5 mb-3`,children:i.jsx("div",{className:"w-full h-full bg-dark-base rounded-lg flex items-center justify-center",children:i.jsx(n.icon,{className:"w-5 h-5 text-white"})})}),i.jsx("h3",{className:"text-lg font-bold text-white mb-1",children:n.name}),i.jsx("p",{className:"text-xs text-gray-400 mb-3",children:n.description}),i.jsxs("div",{className:"mb-4",children:[i.jsx("span",{className:"text-xl font-bold text-white",children:n.price}),i.jsx("span",{className:"text-xs text-gray-400",children:n.period})]}),i.jsx("ul",{className:"space-y-2 flex-1",children:n.features.map((r,s)=>i.jsxs("li",{className:"flex items-start gap-2",children:[i.jsx("div",{className:"w-4 h-4 rounded-full bg-gradient-to-br from-green-500 to-emerald-500 p-0.5 flex-shrink-0 mt-0.5",children:i.jsx("div",{className:"w-full h-full bg-dark-base rounded-full flex items-center justify-center",children:i.jsx(ze,{className:"w-2.5 h-2.5 text-green-400"})})}),i.jsx("span",{className:"text-xs text-gray-300",children:r})]},s))}),i.jsx(M.button,{whileHover:{scale:1.02},whileTap:{scale:.98},className:`mt-4 w-full py-2.5 rounded-lg font-semibold text-sm transition-all ${n.popular?"bg-gradient-to-r from-accent-cyan to-accent-purple text-white hover:shadow-lg hover:shadow-accent-cyan/25":"glass-card text-gray-300 hover:text-white hover:border-accent-cyan/50"}`,children:n.name==="Enterprise"?"Contact Sales":"Start Free Trial"})]})},a))})]}),i.jsx("div",{className:"absolute bottom-8 right-12 text-gray-500",children:"8"})]})},z9=({className:e=""})=>i.jsxs("div",{className:`relative w-[1280px] h-[720px] bg-dark-base ${e}`,style:{overflow:"hidden"},children:[i.jsx(pe,{opacity:.03}),i.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-accent-cyan/10 via-dark-base to-accent-purple/10"}),i.jsx("div",{className:"absolute top-16 right-16 w-64 h-64 bg-gradient-to-br from-accent-cyan/10 to-accent-purple/10 rounded-full blur-3xl animate-pulse"}),i.jsx("div",{className:"absolute bottom-16 left-16 w-48 h-48 bg-gradient-to-br from-accent-purple/10 to-accent-cyan/10 rounded-full blur-2xl animate-pulse"}),i.jsxs("div",{className:"relative z-10 h-full flex flex-col items-center justify-center px-16 py-12 text-center",children:[i.jsxs(M.div,{initial:{opacity:0,y:30},animate:{opacity:1,y:0},transition:{duration:.8},className:"max-w-5xl",children:[i.jsx("div",{className:"flex items-center justify-center mb-3",children:i.jsx("img",{src:"/logo_white.png",alt:"Selent",className:"h-12 opacity-90"})}),i.jsxs("h1",{className:"text-2xl font-bold text-white mb-3",children:["Next Steps to",i.jsx("span",{className:"block text-transparent bg-clip-text bg-gradient-to-r from-accent-cyan to-accent-purple",children:"Modernize Your Network"})]}),i.jsx("p",{className:"text-sm text-gray-300 mb-6 leading-relaxed max-w-2xl mx-auto",children:"Discover how Selent can simplify your Cisco Meraki infrastru
9741cture management with intelligent automation."}),i.jsxs("div",{className:"flex items-center justify-center gap-3 mb-8",children:[i.jsxs(M.button,{whileHover:{scale:1.05},whileTap:{scale:.95},className:"group px-6 py-3 bg-gradient-to-r from-accent-cyan to-accent-purple rounded-lg text-white font-semibold text-sm hover:shadow-xl hover:shadow-accent-cyan/25 transition-all flex items-center gap-2",children:["Start Free Trial",i.jsx(ut,{className:"w-4 h-4 group-hover:translate-x-1 transition-transform"})]}),i.jsxs(M.button,{whileHover:{scale:1.05},whileTap:{scale:.95},className:"group px-6 py-3 glass-card rounded-lg text-gray-300 hover:text-white font-semibold text-sm hover:border-accent-cyan/50 transition-all flex items-center gap-2",children:[i.jsx(qt,{className:"w-4 h-4"}),"Schedule Demo"]})]}),i.jsxs("div",{className:"grid grid-cols-2 gap-4 max-w-md mx-auto mb-8",children:[i.jsxs(M.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.6,delay:.3},className:"glass-card p-4 text-center hover:border-accent-purple/40 transition-all",children:[i.jsx(gn,{className:"w-6 h-6 text-accent-purple mx-auto mb-2"}),i.jsx("div",{className:"text-sm font-semibold text-white",children:"Contact"}),i.jsx("div",{className:"text-xs text-gray-400",children:"[email protected]"})]}),i.jsxs(M.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.6,delay:.4},className:"glass-card p-4 text-center hover:border-accent-cyan/40 transition-all",children:[i.jsx(Hs,{className:"w-6 h-6 text-accent-cyan mx-auto mb-2"}),i.jsx("div",{className:"text-sm font-semibold text-white",children:"Website"}),i.jsx("div",{className:"text-xs text-gray-400",children:"selent.ai"})]})]})]}),i.jsx(M.div,{initial:{opacity:0}
9741,animate:{opacity:1},transition:{duration:.8,delay:.7},className:"absolute bottom-8 left-16 right-16 text-center text-gray-500 text-xs",children:i.jsxs("p",{children:["© ",new Date().getFullYear()," Selent. All rights reserved."]})})]}),i.jsx("div",{className:"absolute bottom-8 right-12 text-gray-500",children:"9"})]}),bp={DeckCover:{component:b9,name:"DeckCover",displayName:"Cover",description:"Opening slide with company branding and title"},DeckProblem:{component:v9,name:"DeckProblem",displayName:"Problem",description:"Problem statement and market pain points"},DeckSolution:{component:w9,name:"DeckSolution",displayName:"Solution",description:"Solution overview and value proposition"},DeckFeatures:{component:k9,name:"DeckFeatures",displayName:"Features",description:"Key features and capabilities"},DeckProcess:{component:A9,name:"DeckProcess",displayName:"Process",description:"Implementation process and workflow"},DeckROI:{component:C9,name:"DeckROI",displayName:"ROI",description:"Return on investment and business benefits"},DeckDemo:{component:E9,name:"DeckDemo",displayName:"Demo",description:"Product demonstration and live preview"},DeckPricing:{component:N9,name:"DeckPricing",displayName:"Pricing",description:"Pricing plans and packages"},DeckCTA:{component:T9,name:"DeckCTA",displayName:"Call to Action",description:"Closing slide with next steps"},DeckCoverEn:{component:j9,name:"DeckCoverEn",displayName:"Cover (EN)",description:"Opening slide with company branding and title - English"},DeckProblemEn:{component:P9,name:"DeckProblemEn",displayName:"Problem (EN)",description:"Problem statement and market pain points - English"},DeckSolutionEn:{component:M9,name:"DeckSolutionEn",displayName:"Solution (EN)",description:"Solution overview and value proposition - English"},DeckFeaturesEn:{component:D9,name:"DeckFeaturesEn",displayName:"Features (EN)",description:"Key features and capabilities - English"},DeckProcessEn:{component:R9,name:"DeckProcessEn",displayName:"Process (EN)",description:"Implementation process and workflow - English"},DeckROIEn:{component:O9,name:"DeckROIEn",displayName:"ROI (EN)",description:"Return on investment and business benefits - English"},DeckDemoEn:{component:_9,name:"DeckDemoEn",displayName:"Demo (EN)",description:"Product demonstration and live preview - English"},DeckPricingEn:{component:L9,name:"DeckPricingEn",displayName:"Pricing (EN)",description:"Pricing plans and packages - English"},DeckCTAEn:{component:z9,name:"DeckCTAEn",displayName:"Call to Action (EN)",description:"Closing slide with next steps - English"},TitleSlide:{component:yA,name:"TitleSlide",displayName:"Title Slide (V2)",description:"AI-Powered Network Operations for Cisco Meraki"},ProblemSlide:{component:bA,name:"ProblemSlide",displayName:"Problem Statement (V2)",description:"The Hidden Cost of Network Management"},SolutionSlide:{component:vA,name:"SolutionSlide",displayName:"Solution Overview (V2)",description:"Introducing Selent"},AIAnalysisSlide:{component:wA,name:"AIAnalysisSlide",displayName:"AI Analysis (V2)",description:"Intelligent Change Analysis"},BenefitsSlide:{component:I9,name:"BenefitsSlide",displayName:"Benefits & ROI (V2)",description:"Measurable Business Impact"},DeckIncidentRemediationV2:{component:kA,name:"DeckIncidentRemediationV2",displayName:"Incident Remediation",description:"Core Feature - Rapid Recovery"},DeckDemoV2:{component:AA,name:"DeckDemoV2",displayName:"Demo",description:"Live Product Demonstration"},DeckToolSuiteV2:{component:CA,name:"DeckToolSuiteV2",displayName:"Tool Suite Overview",description:"Complete Network Management Platform"},DeckComplianceAuditV2:{component:EA,name:"DeckComplianceAuditV2",displayName:"Compliance Audit",description:"AI-Powered Compliance Excellence"},DeckSwitchPortManagerV2:{component:NA,name:"DeckSwitchPortManagerV2",displayName:"Switch Port Manager",description:"Enterprise-Grade Port Management"},DeckTagManagementV2:{component:TA,name:"DeckTagManagementV2",displayName:"Tag Management",description:"Organize. Standardize. Automate."},DeckRnDLabV2:{component:SA,name:"DeckRnDLabV2",displayName:"R&D Innovation Lab",description:"Building the Future of Network Management"},DeckMCPDetailsV2:{component:IA,name:"DeckMCPDetailsV2",displayName:"Selent MCP",description:"Open Source Initiative"},DeckAgentPreviewV2:{component:jA,name:"DeckAgentPreviewV2",displayName:"Selent Agent",description:"The Future is Agentic"}
9741,DeckCTAV2:{component:PA,name:"DeckCTAV2",displayName:"Call to Action (V2)",description:"Ready to Transform Your Cisco Meraki Network?"}};function q9(e){return bp[e]}function B9(e){return e.map(t=>q9(t)).filter(t=>t!==void 0)}function MA({config:e}){const[t,n]=T.useState(0),[a,r]=T.useState(!1),s=B9(e.slides);if(s.length===0)return i.jsx("div",{className:"min-h-screen bg-dark-base flex items-center justify-center",children:i.jsxs("div",{className:"text-center text-red-400",children:[i.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Deck Configuration Error"}),i.jsxs("p",{children:["No valid slides found for deck: ",e.name]}),i.jsxs("p",{className:"text-sm text-gray-500 mt-2",children:["Config ID: ",e.id]})]})});const o=s[t].component,l=()=>{n(m=>(m+1)%s.length)},c=()=>{n(m=>(m-1+s.length)%s.length)},u=()=>{document.fullscreenElement?(document.exitFullscreen(),r(!1)):(document.documentElement.requestFullscreen(),r(!0))},d=()=>{const m=s[t].name;window.open(`/social-preview?component=${m}&export=true`,"_blank")};return Et.useEffect(()=>{const m=p=>{p.key==="ArrowRight"||p.key===" "?l():p.key==="ArrowLeft"?c():(p.key==="Escape"&&a||p.key==="f")&&u()};return window.addEventListener("keydown",m),()=>window.removeEventListener("keydown",m)},[t,a]),i.jsxs("div",{className:"min-h-screen bg-dark-base flex flex-col",children:[!a&&i.jsxs("div",{className:"glass-card m-4 p-4 flex items-center justify-between",children:[i.jsxs("div",{className:"flex items-center gap-4",children:[i.jsx("h1",{className:"text-xl font-semibold text-white",children:e.name}),i.jsxs("span",{className:"text-gray-400",children:["Slide ",t+1," of ",s.length]}),i.jsxs("div",{className:"text-xs text-gray-500 px-2 py-1 bg-dark-elevated rounded",children:["v",e.version]})]}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("div",{className:"flex gap-2 mr-4",children:s.map((m,p)=>i.jsx("button",{onClick:()=>n(p),className:`w-2 h-2 rounded-full transition-all ${p===t?"w-8 bg-accent-cyan":"bg-gray-600 hover:bg-gray-500"}`,title:s[p].displayName},p))}),i.jsx("button",{onClick:c,className:"p-2 glass-card rounded-lg text-gray-400 hover:text-white hover:border-accent-cyan/50 transition-all",title:"Previous slide (â)",children:i.jsx(fh,{className:"w-5 h-5"})}),i.jsx("button",{onClick:l,className:"p-2 glass-card rounded-lg text-gray-400 hover:text-white hover:border-accent-cyan/50 transition-all",title:"Next slide (â)",children:i.jsx(gh,{className:"w-5 h-5"})}),i.jsx("button",{onClick:u,className:"p-2 glass-card rounded-lg text-gray-400 hover:text-white hover:border-accent-purple/50 transition-all ml-2",title:"Fullscreen (F)",children:i.jsx(oT,{className:"w-5 h-5"})}),i.jsx("button",{onClick:d,className:"p-2 glass-card rounded-lg text-gray-400 hover:text-white hover:border-green-500/50 transition-all",title:"Export current slide",children:i.jsx(aT,{className:"w-5 h-5"})})]})]}),i.jsx("div",{className:`flex-1 flex items-center justify-center ${a?"":"p-4"} overflow-auto`,children:i.jsx("div",{className:`${a?"w-full h-screen":"max-w-full"} flex items-center justify-center`,children:i.jsx("div",{className:`${a?"scale-[var(--scale)]":"scale-[0.6] lg:scale-[0.75] xl:scale-[0.9]"} origin-center`,style:{"--scale":a?`${Math.min(window.innerWidth/1280,window.innerHeight/720)*.95}`:"1"},children:i.jsx(o,{})})})}),!a&&i.jsxs("div",{className:"text-center text-gray-500 text-sm pb-4 flex items-center justify-center gap-4 flex-wrap",children:[i.jsx("span",{children:"Use arrow keys to navigate"}),i.jsx("span",{children:"â¢"}),i.jsx("span",{children:"Press F for fullscreen"}),i.jsx("span",{children:"â¢"}),i.jsx("span",{children:"Space for next slide"}),e.description&&i.jsxs(i.Fragment,{children:[i.jsx("span",{children:"â¢"}),i.jsx("span",{className:"text-gray-600",children:e.description})]})]})]})}const DA={v1:{id:"v1",name:"Selent Sales Deck V1",description:"Current comprehensive sales deck with all features",slides:["DeckCover","DeckProblem","DeckSolution","DeckFeatures","DeckProcess","DeckROI","DeckDemo","DeckPricing","DeckCTA"],theme:"dark",visibility:"public",url:"/deck-v1-2b235eb4",version:"1.0.0"},"v1-en":{id:"v1-en",name:"Selent Sales Deck V1 (English)",description:"English version of the comprehensive sales deck",slides:["DeckCoverEn","DeckProblemEn","DeckSolutionEn","DeckFeaturesEn","DeckProcessEn","DeckROIEn","DeckDemoEn","DeckPricingEn","DeckCTAEn"],theme:"dark",visibility:"public",url:"/deck-v1-en-9f4a2c8e",version:"1.0.0"},v2:{id:"v2",name:"Selent Sales Deck V2",description:"Streamlined version focusing on core value proposition",slides:["DeckCover","DeckProblem","DeckSolution","DeckFeatures","DeckDemo","DeckCTA"],theme:"dark",visibility:"private",url:"/deck-v2-7f8a9c1e",version:"2.0.0"},demo:{id:"demo",name:"Selent Demo Deck",description:"Demo-focused presentation for live presentations",slides:["DeckCover","DeckSolution","DeckDemo","DeckFeatures","DeckCTA"],theme:"dark",visibility:"private",url:"/deck-demo-3x5y7z9w",version:"1.0.0"}};function RA(e){return DA[e]}function F9(){const e=RA("v1");return e?i.jsx(MA,{config:e}):i.jsx("div",{className:"min-h-screen bg-dark-base flex items-center justify-center",children:i.jsxs("div",{className:"text-center text-red-400",children:[i.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Configuration Error"}),i.jsx("p",{children:"Deck V1 configuration not found"})]})})}function H9(){const e=RA("v1-en");return e?i.jsx(MA,{config:e}):i.jsx("div",{className:"min-h-screen bg-dark-base flex items-center justify-center",children:i.jsxs("div",{className:"text-center text-red-400",children:[i.jsx("h2",{className:"text-2xl font-bold mb-4",children:"Configuration Error"}),i.jsx("p",{children:"Deck V1 English configuration not found"})]})})}
9741function U9(){const[e]=M1(),t=e.get("config")||"v1",n=parseInt(e.get("slide")||"0"),a=DA[t];if(!a)return i.jsx("div",{className:"w-[1280px] h-[720px] flex items-center justify-center bg-dark-base",children:i.jsxs("p",{className:"text-white",children:["Deck configuration not found: ",t]})});const s=a.slides[n];if(!s||!bp[s])return i.jsx("div",{className:"w-[1280px] h-[720px] flex items-center justify-center bg-dark-base",children:i.jsxs("p",{className:"text-white",children:["Slide not found: ",s," at index ",n]})});const o=bp[s].component;return i.jsx("div",{className:"bg-dark-base min-h-screen flex items-center justify-center",children:i.jsx("div",{className:"w-[1280px] h-[720px]",children:i.jsx(o,{})})})}const V9=()=>{const e=ia();return T.useEffect(()=>{b5(e.pathname+e.search)},[e]),null},Ml=({label:e,color:t="cyan"})=>i.jsx("span",{className:`px-3 py-1 rounded-full font-mono text-xs font-medium ${t==="cyan"?"text-accent-cyan bg-accent-cyan/[0.08]":"text-accent-purple bg-accent-purple/[0.08]"}`,children:e}),Vy=({icon:e,label:t})=>i.jsxs("div",{className:"inline-flex items-center gap-2 px-3.5 py-1.5 rounded-full bg-dark-elevated border border-dark-border",children:[i.jsx(e,{className:"h-3.5 w-3.5 text-accent-cyan"}),i.jsx("span",{className:"text-xs font-semibold text-accent-cyan tracking-widest uppercase",children:t})]}),ji=({icon:e,title:t,description:n,tags:a,iconColor:r="text-accent-cyan",delay:s=0})=>i.jsxs(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},transition:{duration:.5,delay:s},viewport:{once:!0},className:"flex flex-col gap-3 rounded-xl bg-dark-card border border-dark-border p-5 md:p-6",children:[i.jsx(e,{className:`h-6 w-6 ${r}`}),i.jsx("h3",{className:"text-base font-semibold text-white",children:t}),i.jsx("p",{className:"text-[13px] leading-relaxed text-slate-400 flex-1",children:n}),i.jsx("div",{className:"flex flex-wrap gap-1.5 mt-auto",children:a.map(o=>i.jsx(Ml,{label:o.label,color:o.color},o.label))})]}),Qr=({num:e,title:t,description:n,detail:a,color:r="cyan",highlighted:s=!1,delay:o=0})=>i.jsxs(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},transition:{duration:.5,delay:o},viewport:{once:!0},className:`flex flex-col gap-3 rounded-xl bg-dark-card p-5 md:p-6 border ${s?"border-accent-cyan":"border-dark-border"}`,children:[i.jsx("div",{className:`flex items-center justify-center w-10 h-10 rounded-full font-mono text-sm font-bold ${r==="cyan"?"bg-accent-cyan text-dark-base":"bg-accent-purple text-white"}`,children:e}),i.jsx("h3",{className:"text-base font-semibold text-white",children:t}),i.jsx("p",{className:"text-[13px] leading-relaxed text-slate-400",children:n}),i.jsx("div",{className:"rounded-md bg-dark-base px-3 py-2",children:i.jsx("span",{className:`font-mono text-[10px] ${s?"text-accent-cyan":"text-text-muted"}`,children:a})})]}),W9=()=>i.jsxs("div",{className:"rounded-2xl bg-dark-card border border-dark-border overflow-hidden w-full max-w-[680px]",children:[i.jsxs("div",{className:"flex items-center justify-between px-7 py-5 bg-dark-elevated border-b border-dark-border",children:[i.jsxs("div",{className:"flex items-center gap-3",children:[i.jsx(mn,{className:"h-6 w-6 text-accent-cyan"}),i.jsx("span",{className:"text-lg font-semibold text-white",children:"New Project Request"})]}),i.jsxs("div",{className:"flex items-center gap-2 px-3.5 py-2 rounded-full bg-accent-cyan/[0.13]",children:[i.jsx("div",{className:"w-2 h-2 rounded-full bg-accent-cyan"}),i.jsx("span",{className:"text-sm font-medium text-accent-cyan",children:"Analyzing"})]})]}),i.jsxs("div",{className:"flex flex-col gap-6 p-7",children:[i.jsxs("div",{className:"flex flex-col gap-2.5",children:[i.jsx("span",{className:"text-xs font-semibold text-text-muted uppercase tracking-widest",children:"Description"}),i.jsx("div",{className:"rounded-xl bg-dark-base border border-dark-border px-5 py-4",children:i.jsx("p",{className:"text-base leading-relaxed text-white",children:"I need a dashboard that shows real-time bandwidth usage across all my MX appliances, with alerts when any link exceeds 80% utilization."})})]}),i.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[i.jsxs("div",{className:"flex flex-col gap-2.5",children:[i.jsx("span",{className:"text-xs font-semibold text-text-muted uppercase tracking-widest",children:"Organization"}),i.jsxs("div",{className:"flex items-center gap-3 rounded-xl bg-dark-base border border-dark-border px-4 py-3.5",children:[i.jsx(ro,{className:"h-5 w-5 text-text-muted"}),i.jsx("span",{className:"text-base text-white",children:"Acme Corp"})]})]}),i.jsxs("div",{className:"flex flex-col gap-2.5",children:[i.jsx("span",{className:"text-xs font-semibold text-text-muted uppercase tracking-widest",children:"Priority"}),i.jsxs("div",{className:"flex items-center gap-3 rounded-xl bg-dark-base border border-dark-border px-4 py-3.5",children:[i.jsx("div",{className:"w-3 h-3 rounded-full bg-accent-amber"}),i.jsx("span",{className:"text-base text-white",children:"Medium"})]})]})]}),i.jsx("div",{className:"h-px bg-dark-border"}),i.jsxs("div",{className:"flex flex-col gap-3.5 rounded-xl border border-accent-cyan/20 p-6 bg-gradient-to-b from-accent-cyan/[0.06] to-dark-base",children:[i.jsxs("div",{className:"flex items-center gap-2.5",children:[i.jsx(tt,{className:"h-5 w-5 text-accent-cyan"}),i.jsx("span",{className:"text-base font-semibold text-accent-cyan",children:"AI Analysis"})]}),i.jsxs("div",{className:"flex justify-between text-base",children:[i.jsx("span",{className:"text-text-muted",children:"Scope"}),i.jsx("span",{className:"text-white font-medium",children:"Real-time MX bandwidth dashboard"})]}),i.jsxs("div",{className:"flex justify-between text-base",children:[i.jsx("span",{className:"text-text-muted",children:"Timeline"}),i.jsx("span",{className:"text-accent-cyan font-medium",children:"5 business days"})]}),i.jsxs("div",{className:"flex justify-between text-base",children:[i.jsx("span",{className:"text-text-muted",children:"Estimate"}),i.jsx("span",{className:"text-accent-cyan font-bold text-lg",children:"$2,400 fixed price"})]})]}),i.jsxs("div",{className:"flex flex-wrap gap-2.5",children:[i.jsx(Ml,{label:"Meraki API",color:"cyan"}),i.jsx(Ml,{label:"React",color:"purple"}),i.jsx(Ml,{label:"WebSocket",color:"cyan"})]})]})]}),il=({title:e,links:t})=>i.jsxs("div",{className:"flex flex-col gap-3.5",children:[i.jsx("h4",{className:"text-[13px] font-semibold text-white tracking-wide",children:e}),i.jsx("div",{className:"h-1"}),t.map(n=>i.jsx(Ne,{to:n.href,className:"text-sm text-text-muted hover:text-white transition-colors",children:n.label},n.label))]}),$9=()=>{const[e,t]=T.useState(""),[n,a]=T.useState(""),o={"@context":"https://schema.org","@graph":[{"@context":"https://schema.org","@type":"Organization",name:"Selent",url:"https://selent.ai",logo:"https://selent.ai/logo.png",description:"Build any solution on top of Cisco Meraki â AI agents and experts.",sameAs:["https://www.linkedin.com/company/selentai/"]},{"@context":"https://schema.org","@type":"SoftwareApplication",name:"Selent",applicationCategory:"BusinessApplication",operatingSystem:"Web",description:"AI agents and Meraki experts build custom solutions for your network."}]},l=()=>{Dn("homepage-v2-cta"),window.open("https://c87b31wu7aq.typeform.com/to/UuTqiop3","_blank")};return i.jsxs(i.Fragment,{children:[i.jsx(it,{title:"Selent â Build any solution on top of Cisco Meraki",de
9741scription:"AI agents and Meraki experts build custom solutions for your network: automation scripts, analytics dashboards, control UIs, compliance tools, integrations, and monitoring.",keywords:"cisco meraki, network automation, meraki dashboard, meraki api, network management, custom integrations, compliance tools",url:"https://selent.ai",structuredData:o,noindex:!0}),i.jsxs("div",{className:"w-full min-h-full font-sans text-white bg-dark-base",children:[i.jsx("a",{href:"#main-content",className:"skip-to-content",children:"Skip to main content"}),i.jsx("header",{className:"w-full bg-dark-base border-b border-dark-border sticky top-0 z-50",children:i.jsxs("div",{className:"flex items-center justify-between px-8 md:px-[120px] py-5",children:[i.jsx(Ne,{to:"/",className:"font-mono text-[22px] font-bold text-white",children:"selent"}),i.jsxs("div",{className:"flex items-center gap-6",children:[i.jsx(Ne,{to:"/blog",className:"text-sm font-medium text-slate-400 hover:text-white transition-colors",children:"Blog"}),i.jsx("a",{href:"https://app.selent.ai",target:"_blank",rel:"noopener noreferrer",className:"px-4 py-2 text-sm font-medium text-slate-400 rounded-md border border-dark-border hover:border-slate-500 hover:text-white transition-all",children:"Login"})]})]})}),i.jsxs("main",{id:"main-content",className:"w-full",children:[i.jsx("section",{className:"bg-dark-base",children:i.jsxs("div",{className:"flex flex-col lg:flex-row items-center gap-16 px-8 md:px-[120px] py-20",children:[i.jsxs(M.div,{initial:{opacity:0,x:-40},animate:{opacity:1,x:0},transition:{duration:.7,ease:[.23,1,.32,1]},className:"flex flex-col gap-6 flex-1",children:[i.jsxs("div",{className:"inline-flex items-center gap-2 px-3.5 py-1.5 rounded-full bg-dark-elevated border border-dark-border w-fit",children:[i.jsx(na,{className:"h-3.5 w-3.5 text-accent-cyan"}),i.jsx("span",{className:"text-xs font-medium text-accent-cyan",children:"Official Cisco Meraki Technology Partner"})]}),i.jsxs("h1",{className:"text-4xl md:text-[56px] font-bold leading-[1.1] text-white max-w-[560px]",children:["Build any solution",i.jsx("br",{}),"on top of Cisco Meraki"]}),i.jsx("p",{className:"text-lg leading-relaxed text-slate-400 max-w-[520px]",children:"AI agents and Meraki experts build custom solutions for your network: automation scripts, analytics dashboards, control UIs, compliance tools, integrations, and monitoring."}),i.jsxs("div",{className:"flex items-center gap-4",children:[i.jsxs(M.a,{href:"https://c87b31wu7aq.typeform.com/to/UuTqiop3",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2 px-7 py-3.5 bg-accent-cyan text-dark-base font-semibold rounded-lg hover:bg-accent-cyan-dark transition-colors",onClick:()=>Dn("homepage-v2-hero"),whileHover:{scale:1.03},whileTap:{scale:.97},children:["Describe Your Project",i.jsx(ut,{className:"h-[18px] w-[18px]"})]}),i.jsx("a",{href:"#workflow",className:"text-[15px] font-medium text-accent-cyan hover:underline",children:"See How It Works"})]}),i.jsxs("div",{className:"flex flex-col gap-3 pt-3 border-t border-white/10 mt-2",children:[i.jsx("span",{className:"text-[11px] font-semibold text-text-muted uppercase tracking-widest",children:"Trusted by:"}),i.jsxs("div",{className:"flex items-center gap-6 flex-wrap",children:[i.jsx("a",{href:"https://marketplace.cisco.com/en-US/apps/502978/selentai",target:"_blank",rel:"noopener noreferrer",children:i.jsx("img",{alt:"Cisco Meraki Technology Partner",src:"/cisco-meraki-partner.webp",className:"h-16 w-auto opacity-85 hover:opacity-100 transition-all duration-300 hover:drop-shadow-[0_0_8px_rgba(0,212,170,0.4)]"})}),i.jsx("a",{href:"https://marketplace.cisco.com/en-US/apps/502978/selentai",target:"_blank",rel:"noopener noreferrer",children:i.jsx("img",{alt:"Cisco Partner Select Developer",src:"/cisco-meraki-select-developer.webp",className:"h-16 w-auto opacity-85 hover:opacity-100 transition-all duration-300 hover:drop-shadow-[0_0_8px_rgba(0,212,170,0.4)]"})})]})]})]}),i.jsx(M.div,{initial:{opacity:0,scale:.9},animate:{opacity:1,scale:1},transition:{duration:.7,delay:.15,ease:[.23,1,.32,1]},className:"flex-shrink-0",children:i.jsx(W9,{})})]})}),i.jsxs("section",{id:"workflow",className:"bg-dark-elevated",children:[i.jsxs("div",{className:"flex flex-col items-center gap-4 px-8 md:px-[120px] pt-20 pb-10",children:[i.jsx(Vy,{icon:br,label:"How It Works"}),i.jsx("h2",{className:"text-3xl md:text-[40px] font-bold text-white text-center max-w-[700px]",children:"From idea to deployed solution in days, not months"})]}),i.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-5 ga
9741p-5 px-8 md:px-20 pb-20",children:[i.jsx(Qr,{num:"01",title:"Submit Request",description:"Describe what you need in plain English. No technical specs required.",detail:'"I need automated VLAN provisioning..."',color:"cyan",delay:0}),i.jsx(Qr,{num:"02",title:"AI Builds PRD",description:"Our AI agents analyze your request and create a detailed technical specification.",detail:"Scope, architecture, API, timeline",color:"purple",delay:.05}),i.jsx(Qr,{num:"03",title:"Proposal & Estimate",description:"Review a clear proposal with timeline, deliverables, and transparent pricing.",detail:"Fixed price, no surprises",color:"cyan",delay:.1}),i.jsx(Qr,{num:"04",title:"You Approve",description:"Approve the plan and we start building. You stay in the loop at every step.",detail:"Weekly updates, staging previews",color:"purple",delay:.15}),i.jsx(Qr,{num:"05",title:"Build & Deliver",description:"Meraki experts build, test, and deploy your solution to production.",detail:"Deployed, documented, supported",color:"cyan",highlighted:!0,delay:.2})]})]}),i.jsxs("section",{className:"bg-dark-base",children:[i.jsxs("div",{className:"flex flex-col items-center gap-4 px-8 md:px-[120px] pt-20 pb-10",children:[i.jsx(Vy,{icon:nT,label:"Solutions"}),i.jsx("h2",{className:"text-3xl md:text-[40px] font-bold text-white text-center max-w-[700px]",children:"Whatever you need on Meraki, we build it"})]}),i.jsxs("div",{className:"flex flex-col gap-5 px-8 md:px-20 pb-20",children:[i.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[i.jsx(ji,{icon:Pn,title:"Automation Scripts",description:"Automate repetitive network tasks: bulk provisioning, config templates, scheduled changes, and API-driven workflows.",tags:[{label:"Python",color:"cyan"},{label:"Meraki API",color:"cyan"},{label:"Webhooks",color:"purple"}],delay:0}),i.jsx(ji,{icon:In,title:"Analytics Dashboards",description:"Custom dashboards with real-time network metrics, traffic analysis, device health, and historical trends.",iconColor:"text-accent-purple",tags:[{label:"Real-time",color:"cyan"},{label:"Visualization",color:"purple"},{label:"Alerts",color:"cyan"}],delay:.05}),i.jsx(ji,{icon:mn,title:"Control UIs",description:"Purpose-built interfaces for network operators: simplified views, bulk actions, and role-based access controls.",tags:[{label:"React",color:"purple"},{label:"Role-based",color:"cyan"},{label:"Custom",color:"purple"}],delay:.1})]}),i.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-5",children:[i.jsx(ji,{icon:gi,title:"Compliance Tools",description:"Automated compliance checks, audit trails, policy enforcement, and regulatory reporting for your Meraki networks.",iconColor:"text-accent-purple",tags:[{label:"PCI DSS",color:"purple"},{label:"Audit",color:"cyan"},{label:"Policies",color:"purple"}],delay:.15}),i.jsx(ji,{icon:Ma,title:"Custom Integrations",description:"Connect Meraki with your existing tools: ITSM, monitoring platforms, identity providers, and business systems.",tags:[{label:"ServiceNow",color:"cyan"},{label:"Splunk",color:"purple"},{label:"SSO",color:"cyan"}],delay:.2}),i.jsx(ji,{icon:fi,title:"Monitoring & Alerts",description:"Proactive monitoring with intelligent alerts, anomaly detection, and automated incident response for your network.",tags:[{label:"AI-Powered",color:"cyan"},{label:"Proactive",color:"purple"},{label:"24/7",color:"cyan"}],delay:.25})]})]})]}),i.jsx("section",{className:"bg-dark-elevated",children:i.jsxs("div",{className:"flex flex-col items-center gap-8 px-8 md:px-[200px] py-20",children:[i.jsx("h2",{className:"text-3xl md:text-[40px] font-bold text-white text-center max-w-[600px]",children:"Describe your first Meraki project"}),i.jsx("p",{className:"text-lg text-slate-400 text-center max-w-[500px]",children:"Tell us what you need and our AI agents will analyze your request within hours."}),i.jsxs("div",{className:"w-full max-w-[600px] rounded-2xl bg-dark-card border border-dark-border p-7 flex flex-col gap-4",children:[i.jsx("label",{className:"text-sm font-semibold text-white",children:"What do you need?"}
9741),i.jsx("textarea",{value:e,onChange:c=>t(c.target.value),placeholder:"e.g., I need a script that automatically provisions VLANs when a new site is added to our Meraki org...",className:"w-full h-[100px] rounded-lg bg-dark-base border border-dark-border px-4 py-3.5 text-[13px] leading-relaxed text-white placeholder:text-text-muted-dark resize-none focus:outline-none focus:border-accent-cyan/50 transition-colors"}),i.jsxs("div",{className:"flex gap-3",children:[i.jsxs("div",{className:"flex items-center gap-2 flex-1 rounded-lg bg-dark-base border border-dark-border px-4 py-3",children:[i.jsx(gn,{className:"h-4 w-4 text-text-muted-dark"}),i.jsx("input",{type:"email",value:n,onChange:c=>a(c.target.value),placeholder:"[email protected]",className:"bg-transparent text-sm text-white placeholder:text-text-muted-dark w-full focus:outline-none"})]}),i.jsxs("button",{onClick:l,className:"inline-flex items-center gap-2 px-6 py-3 rounded-lg bg-accent-cyan text-dark-base text-sm font-semibold hover:bg-accent-cyan-dark transition-colors whitespace-nowrap",children:["Submit Project Request",i.jsx(ut,{className:"h-4 w-4"})]})]})]}),i.jsxs("div",{className:"flex items-center justify-center gap-8 flex-wrap",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx(ze,{className:"h-4 w-4 text-accent-cyan"}),i.jsx("span",{className:"text-sm text-slate-400",children:"Free analysis"})]}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx(ze,{className:"h-4 w-4 text-accent-cyan"}),i.jsx("span",{className:"text-sm text-slate-400",children:"Response in <24h"})]}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx(ze,{className:"h-4 w-4 text-accent-cyan"}),i.jsx("span",{className:"text-sm text-slate-400",children:"No commitment"})]})]})]})}),i.jsxs("footer",{className:"bg-dark-base",children:[i.jsx("div",{className:"h-0.5 bg-gradient-to-r from-transparent via-accent-cyan to-transparent"}),i.jsxs("div",{className:"flex flex-col md:flex-row items-center justify-between gap-6 px-8 md:px-[120px] py-8 bg-dark-surface border-b border-dark-card",children:[i.jsxs("div",{className:"flex flex-col gap-1",children:[i.jsx("h3",{className:"text-base font-semibold text-white",children:"Stay in the loop"}),i.jsx("p",{className:"text-sm text-text-muted",children:"Get the latest updates on AI agents and Meraki solutions."})]}),i.jsxs("div",{className:"flex items-center gap-3",children:[i.jsx("div",{className:"flex items-center h-11 rounded-lg bg-dark-card border border-dark-border px-4 w-[280px]",children:i.jsx("input",{type:"email",placeholder:"Enter your email",className:"bg-transparent text-sm text-white placeholder:text-text-muted-dark w-full focus:outline-none"})}),i.jsx("button",{className:"h-11 px-6 rounded-lg bg-accent-cyan text-dark-base text-sm font-semibold hover:bg-accent-cyan-dark transition-colors",children:"Subscribe"})]})]}),i.jsxs("div",{className:"flex flex-col lg:flex-row gap-20 px-8 md:px-[120px] py-16",children:[i.jsxs("div",{className:"flex flex-col gap-5 max-w-[300px]",children:[i.jsx("span",{className:"font-mono text-2xl font-bold text-white",children:"selent"}),i.jsxs("p",{className:"text-sm leading-relaxed text-slate-400",children:["Building intelligent solutions on Meraki.",i.jsx("br",{}),"From idea to deployed AI agents in days, not months."]}),i.jsxs("div",{className:"flex items-center gap-4",children:[i.jsx("a",{href:"https://twitter.com/selentai",target:"_blank",rel:"noopener noreferrer",className:"text-text-muted hover:text-white transition-colors",onClick:()=>Yo("twitter","homepage-v2-footer"),children:i.jsx(hT,{className:"h-5 w-5"})}),i.jsx("a",{href:"https://github.com/selent-ai",target:"_blank",rel:"noopener noreferrer",className:"text-text-muted hover:text-white transition-colors",onClick:()=>Yo("github","homepage-v2-footer"),children:i.jsx(ur,{className:"h-5 w-5"})}),i.jsx("a",{href:"https://www.linkedin.com/company/selentai/",target:"_blank",rel:"noopener noreferrer",className:"text-text-muted hover:text-white transition-colors",onClick:()=>Yo("linkedin","homepage-v2-footer"),children:i.jsx(rT,{className:"h-5 w-5"})}),i.jsx("a",{href:"https://youtube.com/@selentai",target:"_blank",rel:"noopener noreferrer",className:"text-text-muted hover:text-white transition-colors",onClick:()=>Yo("youtube","homepage-v2-footer"),children:i.jsx(gT,{className:"h-5 w-5"})})]})]}),i.jsxs("div",{className:"flex-1 grid grid-cols-2 md:grid-cols-4 gap-10 lg:gap-16",children:[i.jsx(il,{title:"Product",links:[{label:"Features",href:"/#features"},{label:"Pricing",href:"/#pricing"},{label:"Integrations",href:"/#integrations"},{label:"Changelog",href:"/changelog"},{label:"Documentation",href:"/docs"}
9741]}),i.jsx(il,{title:"Company",links:[{label:"About",href:"/about"},{label:"Blog",href:"/blog"},{label:"Careers",href:"/careers"},{label:"Contact",href:"/contact"}]}),i.jsx(il,{title:"Resources",links:[{label:"Help Center",href:"/help"},{label:"API Reference",href:"/api"},{label:"Community",href:"/community"},{label:"Status",href:"/status"}]}),i.jsx(il,{title:"Legal",links:[{label:"Privacy Policy",href:"/privacy"},{label:"Terms of Service",href:"/terms"},{label:"Cookie Policy",href:"/cookies"},{label:"Security",href:"/security"}]})]})]}),i.jsx("div",{className:"h-px bg-dark-card mx-8 md:mx-[120px]"}),i.jsxs("div",{className:"flex flex-col sm:flex-row items-center justify-between px-8 md:px-[120px] py-6",children:[i.jsx("span",{className:"text-[13px] text-text-muted-dark",children:"© 2026 selent. All rights reserved."}),i.jsxs("div",{className:"flex items-center gap-6",children:[i.jsx(Ne,{to:"/privacy",className:"text-[13px] text-text-muted-dark hover:text-slate-400 transition-colors",children:"Privacy"}),i.jsx(Ne,{to:"/terms",className:"text-[13px] text-text-muted-dark hover:text-slate-400 transition-colors",children:"Terms"}),i.jsx(Ne,{to:"/cookies",className:"text-[13px] text-text-muted-dark hover:text-slate-400 transition-colors",children:"Cookies"})]})]}),i.jsx("div",{className:"h-8"})]})]})]})]})},Y9=["gmail.com","yahoo.com","hotmail.com","outlook.com","live.com","aol.com","icloud.com","mail.com","protonmail.com","zoho.com","yandex.com","gmx.com","fastmail.com","tutanota.com","hey.com","pm.me","msn.com","me.com","mac.com"],OA=e=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e),G9=e=>OA(e)?!Y9.includes(e.toLowerCase().split("@")[1]):!1;async function Q9(e,t){const n=await fetch("/api/project-request",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e,description:t})});if(!n.ok){const a=await n.json().catch(()=>({}));throw new Error(a.error||"Request failed")}}const K9=()=>{const[e,t]=T.useState(""),[n,a]=T.useState(""),[r,s]=T.useState(""),[o,l]=T.useState(""),[c,u]=T.useState("idle"),d=async m=>{m.preventDefault(),s(""),l("");let p=!1;if(n.trim()||(l("Please describe your project"),p=!0),e?OA(e)?G9(e)||(s("Please use your corporate email address"),p=!0):(s("Please enter a valid email"),p=!0):(s("Email is required"),p=!0),!p){u("submitting");try{await Q9(e,n),Dn("homepage-v3-cta"),u("success")}catch{u("success")}}};return c==="success"?i.jsxs(M.div,{initial:{scale:.95,opacity:0},animate:{scale:1,opacity:1},className:"w-full max-w-[800px] rounded-[16px] bg-[#1A1A1D] border border-[#262629] p-5 sm:p-8 flex flex-col items-center gap-4",children:[i.jsx(M.div,{initial:{scale:0},animate:{scale:1},transition:{type:"spring",stiffness:200,delay:.1},className:"w-14 h-14 rounded-full bg-blue-500/10 border border-blue-500/30 flex items-center justify-center",children:i.jsx(ze,{className:"w-7 h-7 text-blue-400"})}),i.jsx("h3",{className:"text-[22px] font-bold text-white",children:"Request received!"}),i.jsx("p",{className:"text-[15px] text-[#94A3B8] text-center",children:"We'll analyze your project and get back to you within 24 hours."})]}):i.jsxs("form",{onSubmit:d,className:"w-full max-w-[800px] rounded-[16px] bg-[#1A1A1D] border border-[#262629] p-5 sm:p-8 flex flex-col gap-5",children:[i.jsx("label",{htmlFor:"cta-desc",className:"text-[20px] sm:text-[24px] font-semibold text-white",children:"What do you need?"}),i.jsxs("div",{className:"flex flex-col gap-1",children:[i.jsx("textarea",{id:"cta-desc",value:n,onChange:m=>{a(m.target.value),l("")},rows:5,placeholder:"e.g., I need a script that automatically provisions VLANs when a new site is added to our Cisco Networking org...",className:`rounded-[8px] bg-dark-base border ${o?"border-red-400":"border-[#262629]"} px-4 py-[14px] text-[16px] leading-[1.5] text-white placeholder:text-[#475569] resize-none focus:outline-none focus:border-blue-500/50`}),o&&i.jsxs(M.p,{initial:{opacity:0,y:-5},animate:{opacity:1,y:0},className:"text-[16px] text-red-400 flex items-center gap-1 mt-1",children:[i.jsx(ge,{className:"w-3.5 h-3.5"})," ",o]})]}),i.jsxs("div",{className:"flex flex-col gap-1",children:[i.jsxs("div",{className:"flex flex-col sm:flex-row gap-3",children:[i.jsxs("div",{className:`flex items-center gap-2 rounded-[8px] bg-dark-base border ${r?"border-red-400":"border-[#262629]"} px-4 py-3 flex-1 min-w-0`,children:[i.jsx(gn,{className:"w-4 h-4 text-[#475569] shrink-0"}
9741),i.jsx("input",{type:"email",value:e,onChange:m=>{t(m.target.value),s("")},placeholder:"[email protected]",className:"bg-transparent text-[14px] text-white placeholder:text-[#475569] w-full focus:outline-none"})]}),i.jsx("button",{type:"submit",disabled:c==="submitting",className:"flex items-center justify-center gap-2 rounded-[8px] bg-blue-500 px-6 py-3 shrink-0 hover:bg-blue-600 transition-colors disabled:opacity-60",children:c==="submitting"?i.jsx(sT,{className:"w-4 h-4 text-white animate-spin"}):i.jsxs(i.Fragment,{children:[i.jsx("span",{className:"text-[14px] font-semibold text-white",children:"Submit Project Request"}),i.jsx(ut,{className:"w-4 h-4 text-white"})]})})]}),r?i.jsxs(M.p,{initial:{opacity:0,y:-5},animate:{opacity:1,y:0},className:"text-[12px] text-red-400 flex items-center gap-1 mt-1",children:[i.jsx(ge,{className:"w-3.5 h-3.5"})," ",r]}):i.jsx("p",{className:"text-[11px] text-[#475569] mt-1",children:"Please use your corporate email address"})]})]})},Wy=[{label:"Home",href:"/"},{label:"Blog",href:"/blog"},{label:"How It Works",href:"/#how-it-works"},{label:"Solutions",href:"/#solutions"}],X9=[{alt:"Cisco Meraki",src:"/cisco-meraki-partner.webp"},{alt:"Cisco Select Developer",src:"/cisco-meraki-select-developer.webp"}],Kr=({children:e,href:t,variant:n="ghost",className:a="",onClick:r})=>{const s="h-[40px] rounded-[12px] font-medium transition-colors duration-200 inline-flex items-center justify-center text-[16px] leading-[normal] px-[16px] py-[8px] text-white";if(n==="primary"){const l=i.jsxs("span",{className:`${s} relative overflow-hidden ${a}`,children:[i.jsxs("span",{className:"absolute inset-0 pointer-events-none rounded-[12px]",children:[i.jsx("span",{className:"absolute bg-blue-600 inset-0 rounded-[12px]"}),i.jsx("span",{className:"absolute bg-[rgba(255,255,255,0.2)] inset-0 mix-blend-overlay rounded-[12px]"})]}),i.jsx("span",{className:"relative z-10",children:e})]});return t?i.jsx("a",{href:t,onClick:r,children:l}):i.jsx("button",{onClick:r,children:l})}const o=i.jsx("span",{className:`${s} backdrop-blur-[20px] bg-[rgba(235,235,246,0.1)] border border-[rgba(255,255,255,0.35)] ${a}`,children:e});return t?i.jsx("a",{href:t,onClick:r,children:o}):i.jsx("button",{onClick:r,children:o})},$y=[{description:"I need a dashboard that shows real-time bandwidth usage across all my MX appliances, with alerts when any link exceeds 80% utilization.",org:"Acme Corp",priority:"Medium",priorityColor:"bg-amber-400",tags:["Cisco Networking API","React","WebSocket"]},{description:"Automate VLAN provisioning across 200+ switches when a new office is onboarded. Should follow our naming convention and security templates.",org:"GlobalNet Inc",priority:"High",priorityColor:"bg-red-400",tags:["Cisco Networking API","Python","Automation"]},{description:"Build a compliance checker that audits all our MR access points against CIS benchmarks and generates weekly PDF reports for stakeholders.",org:"SecureHealth Ltd",priority:"High",priorityColor:"bg-red-400",tags:["Compliance","PDF Reports","Cisco Networking API"]}],Z9=()=>{const e=[{name:"MX-HQ-01",usage:72,status:"ok"},{name:"MX-BR-02",usage:87,status:"warn"},{name:"MX-DC-03",usage:45,status:"ok"},{name:"MX-BR-04",usage:91,status:"alert"}];return i.jsxs("div",{className:"flex flex-col gap-2.5",children:[i.jsxs("div",{className:"flex items-center justify-between mb-1",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx(In,{className:"w-3.5 h-3.5 text-blue-400"}),i.jsx("span",{className:"text-[11px] font-semibold text-blue-400",children:"Live Bandwidth"})]}),i.jsx("span",{className:"text-[10px] text-white/30 font-mono hidden sm:inline",children:"4 appliances"})]}),e.map(t=>i.jsxs("div",{className:"flex items-center gap-2 sm:gap-3",children:[i.jsx("span",{className:"text-[9px] sm:text-[10px] font-mono text-white/50 w-[60px] sm:w-[72px] shrink-0",children:t.name}),i.jsxs("div",{className:"flex-1 h-[14px] rounded-[4px] bg-[rgba(6,6,20,0.8)] overflow-hidden relative",children:[i.jsx(M.div,{initial:{width:0},animate:{width:`${t.usage}%`},transition:{duration:.8,ease:"easeOut"},className:`h-full rounded-[4px] ${t.status==="alert"?"bg-gradient-to-r from-red-500/80 to-red-400":t.status==="warn"?"bg-gradient-to-r from-amber-500/80 to-amber-400":"bg-gradient-to-r from-blue-500/60 to-blue-400"}`}),i.jsxs("span",{className:"absolute right-1.5 top-1/2 -translate-y-1/2 text-[9px] font-mono font-bold text-white/80",children:[t.usage,"%"]})]}),t.status==="alert"&&i.jsx(fi,{className:"w-3 h-3 text-red-400 animate-pulse shrink-0"})]},t.name)),i.jsxs("div",{className:"flex items-center justify-between mt-1 pt-2 border-t border-white/5",children:[i.jsxs("div",{className:"flex items-center gap-1.5",children:[i.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-red-400 animate-pulse"}),i.jsx("span",{className:"text-[10px] text-red-400/80",children:"1 alert >80%"})]}),i.jsx("span",{className:"text-[10px] text-white/30 hidden sm:inline",children:"Updated 2s ago"})]})]})},J9=()=>{const e=[{name:"VLAN-CORP-110",status:"done"},{name:"VLAN-VOICE-120",status:"done"},{name:"VLAN-GUEST-130",status:"active"},{name:"VLAN-IOT-140",status:"pending"}];return i.jsxs("div",{className:"flex flex-col gap-2.5",children:[i.jsxs("div",{className:"flex items-center justify-between mb-1",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx(Us,{className:"w-3.5 h-3.5 text-cyan-400 animate-[spin_3s_linear_infinite]"}),i.jsx("span",{className:"text-[11px] font-semibold text-cyan-400",children:"Provisioning"})]}),i.jsx("span",{className:"text-[10px] text-white/30 font-mono hidden sm:inline",children:"200+ switches"})]}),e.map(t=>i.jsxs("div",{className:"flex items-center gap-2 sm:gap-3 rounded-[6px] bg-[rgba(6,6,20,0.6)] px-2 sm:px-3 py-2",children:[i.jsx("span",{className:`w-2 h-2 rounded-full shrink-0 ${t.status==="done"?"bg-emerald-400":t.status==="active"?"bg-cyan-400 animate-pulse":"bg-white/20"}`}),i.jsx("span",{className:"text-[10px] font-mono text-white/70 flex-1",children:t.name}),i.jsx("span",{className:`text-[9px] font-semibold uppercase tracking-wider ${t.status==="done"?"text-emerald-400/70":t.status==="active"?"text-cyan-400":"text-white/25"}`,children:t.status==="done"?"deployed":t.status==="active"?"deploying...":"queued"})]},t.name)),i.jsxs("div",{className:"flex items-center gap-2 mt-1",children:[i.jsx("div",{className:"flex-1 h-1.5 rounded-full bg-[rgba(6,6,20,0.8)] overflow-hidden",children:i.jsx(M.div,{initial:{width:"0%"},animate:{width:"62%"},transition:{duration:1.2,ease:"easeOut"},className:"h-full rounded-full bg-gradient-to-r from-cyan-500 to-emerald-400"})}),i.jsx("span",{className:"text-[10px] font-mono text-white/40",children:"62%"})]})]})},eq=()=>{const e=[{name:"SSID encryption",passed:!0},{name:"Rogue AP detection",passed:!0},{name:"Firmware version",passed:!1},{name:"RADIUS auth",passed:!0},{name:"Band steering",passed:!0}],t=Math.round(e.filter(n=>n.passed).length/e.length*100);return i.jsxs("div",{className:"flex flex-col gap-2.5",children:[i.jsxs("div",{className:"flex items-center justify-between mb-1",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx(gi,{className:"w-3.5 h-3.5 text-emerald-400"}),i.jsx("span",{className:"text-[11px] font-semibold text-emerald-400",children:"CIS Audit"})]}),i.jsx("span",{className:"text-[10px] text-white/30 font-mono hidden sm:inline",children:"48 APs scanned"})]}),i.jsxs("div",{className:"flex items-center gap-4 mb-1",children:[i.jsxs("div",{className:"relative w-[52px] h-[52px]",children:[i.jsxs("svg",{viewBox:"0 0 36 36",className:"w-full h-full -rotate-90",children:[i.jsx("circle",{cx:"18",cy:"18",r:"15",fill:"none",stroke:"rgba(255,255,255,0.05)",strokeWidth:"3"}),i.jsx(M.circle,{cx:"18",cy:"18",r:"15",fill:"none",stroke:"rgb(52,211,153)",strokeWidth:"3",strokeDasharray:`${t*.94} 100`,strokeLinecap:"round",initial:{strokeDasharray:"0 100"},animate:{strokeDasharray:`${t*.94} 100`},transition:{duration:1,ease:"easeOut"}})]}),i.jsxs("span",{className:"absolute inset-0 flex items-center justify-center text-[12px] font-bold text-emerald-400",children:[t,"%"]})]}),i.jsxs("div",{className:"flex flex-col gap-0.5",children:[i.jsxs("span",{className:"text-[10px] text-white/40",children:[e.filter(n=>n.passed).length,"/",e.length," checks passed"]}),i.jsx("span",{className:"text-[10px] text-amber-400/70",children:"1 remediation needed"})]})]}),e.map(n=>i.jsxs("div",{className:"flex items-center gap-2.5",children:[n.passed?i.jsx(oe,{className:"w-3 h-3 text-emerald-400/70 shrink-0"}):i.jsx("span",{className:"w-3 h-3 rounded-full border-2 border-amber-400/60 shrink-0"}),i.jsx("span",{className:`text-[10px] ${n.passed?"text-white/50":"text-amber-400/80 font-medium"}`,children:n.name})]},n.name))]})},tq=[Z9,J9,eq],nq=()=>{const[e,t]=T.useState(0),[n,a]=T.useState(""),[r,s]=T.useState(!0),[o,l]=T.useState(!1),c=$y[e];return T.useEffect(()=>{a(""),s(!0),l(!1);let u=0;const d=c.description,m=setInterval(()=>{u++,a(d.slice(0,u)),u>=d.length&&(clearInterval(m),s(!1))},12);return()=>clearInterval(m)},[e]),T.useEffect(()=>{if(!r){const u=setTimeout(()=>l(!0),400);return()=>clearTimeout(u)}},[r]),T.useEffect(()=>{if(o){const u=setTimeout(()=>{t(d=>(d+1)%$y.length)},4e3);return()=>clearTimeout(u)}},[o]),i.jsxs("div",{className:"w-[560px] max-w-full rounded-[16px] overflow-hidden flex flex-col backdrop-blur-[20px]",style:{background:"linear-gradient(135deg, rgba(30,30,60,0.85) 0%, rgba(20,20,50,0.7) 100%)",border:"1px solid rgba(96,96,255,0.25)",boxShadow:"0 8px 40px rgba(31,31,255,0.15), inset 0 1px 0 rgba(255,255,255,0.06)"},children:[i.jsxs("div",{className:"flex items-center justify-between px-4 sm:px-7 py-4 sm:py-5 gap-3",style:{background:"rgba(15,15,40,0.6)",borderBottom:"1px solid rgba(96,96,255,0.2)"},children:[i.jsxs("div",{className:"flex items-center gap-2 sm:gap-3 min-w-0",children:[i.jsx(mn,{className:"w-5 h-5 text-blue-400 shrink-0"}),i.jsx("span",{className:"text-[15px] sm:text-[17px] font-semibold text-white truncate",children:"New Project Request"})]}),i.jsxs("div",{className:"flex items-center gap-2 rounded-full bg-blue-500/15 px-3 sm:px-4 py-1.5 border border-blue-500/25 shrink-0",children:[i.jsx("span",{className:`w-2 h-2 rounded-full ${r?"bg-amber-400":"bg-blue-400"} animate-pulse`}),i.jsx("span",{className:`text-[11px] sm:text-[12px] font-medium whitespace-nowrap ${r?"text-amber-400":"text-blue-400"}`,children:r?"Typing...":o?"Built":"Building..."})]})]}),i.jsxs("div",{className:"flex flex-col gap-4 sm:gap-5 p-4 sm:p-7",children:[i.jsxs("div",{className:"flex flex-col gap-2",children:[i.jsx("span",{className:"text-[11px] sm:text-[12px] font-medium text-blue-300/60 tracking-[1px] uppercase",children:"Description"}),i.jsx("div",{className:"rounded-[10px] bg-[rgba(10,10,30,0.6)] border border-[rgba(96,96,255,0.15)] px-3 sm:px-5 py-3 sm:py-4 h-[90px] sm:h-[100px] overflow-hidden",children:i.jsxs("p",{className:"text-[13px] sm:text-[15px] leading-[1.5] sm:leading-[1.6] text-white/90 break-words",children:[n,r&&i.jsx("span",{className:"inline-block w-[2px] h-[18px] bg-blue-400 ml-0.5 animate-pulse align-text-bottom"})]})})]}),i.jsxs("div",{className:"flex gap-3 sm:gap-4",children:[i.jsxs("div",{className:"flex flex-col gap-1.5 sm:gap-2 flex-1 min-w-0",children:[i.jsx("span",{className:"text-[11px] sm:text-[12px] font-medium text-blue-300/60 tracking-[1px] uppercase",children:"Organization"}),i.jsxs("div",{className:"flex items-center gap-2 sm:gap-3 rounded-[10px] bg-[rgba(10,10,30,0.6)] border border-[rgba(96,96,255,0.15)] px-3 sm:px-4 py-2.5 sm:py-3",children:[i.jsx(ro,{className:"w-4 h-4 text-blue-400/60 shrink-0"}),i.jsx("span",{className:"text-[13px] sm:text-[15px] text-white truncate",children:c.org})]})]}),i.jsxs("div",{className:"flex flex-col gap-1.5 sm:gap-2 shrink-0",children:[i.jsx("span",{className:"text-[11px] sm:text-[12px] font-medium text-blue-300/60 tracking-[1px] uppercase",children:"Priority"}),i.jsxs("div",{className:"flex items-center gap-2 sm:gap-3 rounded-[10px] bg-[rgba(10,10,30,0.6)] border border-[rgba(96,96,255,0.15)] px-3 sm:px-4 py-2.5 sm:py-3",children:[i.jsx("span",{className:`w-2.5 h-2.5 rounded-full ${c.priorityColor}`}),i.jsx("span",{className:"text-[13px] sm:text-[15px] text-white",children:c.priority})]})]})]}),i.jsx("div",{className:"h-px bg-blue-500/15"}
9741),i.jsx(M.div,{animate:{opacity:o?1:.3},transition:{duration:.5,ease:"easeOut"},className:"rounded-[12px] p-3 sm:p-5 h-[210px] sm:h-[240px] flex flex-col overflow-hidden",style:{background:"linear-gradient(180deg, rgba(59,130,246,0.08) 0%, rgba(10,10,30,0.5) 100%)",border:"1px solid rgba(59,130,246,0.15)"},children:o?i.jsx(po,{mode:"wait",children:i.jsx(M.div,{initial:{opacity:0,y:8},animate:{opacity:1,y:0},exit:{opacity:0,y:-8},transition:{duration:.4},children:Et.createElement(tq[e])},e)}):i.jsxs("div",{className:"flex-1 flex flex-col items-center justify-center gap-3",children:[i.jsx(tt,{className:`w-5 h-5 text-blue-400 ${r?"opacity-40":"animate-spin"}`}),i.jsx("span",{className:"text-[12px] text-blue-400/60",children:r?"Waiting for input...":"Building solution preview..."})]})}),i.jsx("div",{className:"flex gap-2 sm:gap-2.5 flex-wrap",children:c.tags.map(u=>i.jsx("span",{className:"rounded-full bg-blue-500/10 border border-blue-500/20 px-2.5 sm:px-3 py-1 sm:py-1.5 text-[10px] sm:text-[11px] font-medium font-mono text-blue-400",children:u},u))})]})]})},aq=()=>{const[e,t]=T.useState(!1),[n,a]=T.useState(!1);T.useEffect(()=>{const l=()=>a(window.scrollY>50);return window.addEventListener("scroll",l),()=>window.removeEventListener("scroll",l)},[]);const o={"@context":"https://schema.org","@graph":[{"@context":"https://schema.org","@type":"Organization",name:"Selent",url:"https://selent.ai",logo:"https://selent.ai/logo.png",description:"Build any solution on top of Cisco Networking â AI agents and networking experts.",sameAs:["https://www.linkedin.com/company/selentai/"]},{"@context":"https://schema.org","@type":"SoftwareApplication",name:"Selent",applicationCategory:"BusinessApplication",operatingSystem:"Web",description:"AI-powered network operations management for Cisco Networking. Automated config backup, AI-driven change analysis, natural language search, and compliance automation."}]};return i.jsxs(i.Fragment,{children:[i.jsx(it,{title:"Build any solution on top of Cisco Networking",description:"Automated config backup, AI-driven change analysis, natural language search, and compliance automation for Cisco Networking.",keywords:"cisco networking, cisco meraki, network automation, config backup, network management, compliance tools",url:"https://selent.ai",structuredData:o}),i.jsxs("div",{className:"w-full min-h-full font-sans text-white origin-top",style:{zoom:.8},children:[i.jsx("header",{className:`fixed top-0 left-0 right-0 w-full z-50 px-6 py-[20px] lg:px-[44px] transition-all duration-300 ${n?"bg-dark-base/95 backdrop-blur-md py-[14px]":"bg-transparent py-[30px]"}`,children:i.jsxs("nav",{className:"mx-auto max-w-[1440px]",children:[i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsx(Ne,{to:"/",className:"flex items-center",children:i.jsx("img",{src:"/logo_white.png",alt:"Selent",className:"h-9 w-auto object-contain"})}),i.jsx("div",{className:"hidden md:flex items-center gap-8",children:Wy.map(l=>l.href.startsWith("/#")?i.jsx("a",{href:l.href,onClick:c=>{c.preventDefault();const u=l.href.replace("/#",""),d=document.getElementById(u);d&&d.scrollIntoView({behavior:"smooth",block:"start"})},className:"text-white hover:text-blue-400 transition-colors cursor-pointer text-xl",children:l.label},l.label):i.jsx(Ne,{to:l.href,className:"text-white hover:text-blue-400 transition-colors text-xl",children:l.label},l.label))}),i.jsx("div",{className:"hidden md:flex items-center gap-2",children:i.jsx(Kr,{href:"https://app.selent.ai",variant:"primary",children:"Log In"})}),i.jsx("button",{className:"md:hidden flex items-center justify-center w-8 h-8 text-white",onClick:()=>t(!e),children:e?i.jsx(v1,{className:"w-6 h-6"}):i.jsx(cT,{className:"w-6 h-6"})})]}),i.jsx(po,{children:e&&i.jsxs(M.div,{initial:{opacity:0,height:0},animate:{opacity:1,height:"auto"},exit:{opacity:0,height:0},className:"md:hidden mt-4 flex flex-col gap-4 pb-4",children:[Wy.map(l=>l.href.startsWith("/#")?i.jsx("a",{href:l.href,onClick:c=>{c.preventDefault(),t(!1);const u=l.href.replace("/#",""),d=document.getElementById(u);d&&d.scrollIntoView({behavior:"smooth",block:"start"})},className:"text-white hover:text-blue-400 transition-colors py-2 cursor-pointer",children:l.label},l.label):i.jsx(Ne,{to:l.href,className:"text-white hover:text-blue-400 transition-colors py-2",onClick:()=>t(!1),children:l.label},l.label)),i.jsxs("div",{className:"flex gap-2 pt-2",children:[i.jsx(Kr,{href:"https://app.selent.ai",variant:"ghost",children:"Log In"}),i.jsx(Kr,{href:"https://app.selent.ai/auth/signup",variant:"primary",children:"Sign Up"})]})]})})]})}),i.jsxs("main",{className:"relative w-full",children:[i.jsxs("section",{className:"relative w-full overflow-visible bg-dark-base",children:[i.jsx("div",{className:"absolute inset-0 z-0",style:{background:"radial-gradient(ellipse 90% 110% at 90% 8
97410%, #4040ff 0%, #2a2aff 8%, #1f1fff 15%, #1414c0 28%, #0a0a6e 42%, #050530 58%, #0A0A0B 78%)"}}),i.jsx("div",{className:"h-[100px] md:h-[110px] relative z-10"}),i.jsx("div",{className:"px-6 lg:px-[44px] relative z-10 pt-[80px] pb-[80px]",children:i.jsx("div",{className:"w-full max-w-[1440px] mx-auto",children:i.jsxs("div",{className:"flex items-start justify-between gap-16 flex-wrap lg:flex-nowrap",children:[i.jsxs(M.div,{initial:{opacity:0,y:30},animate:{opacity:1,y:0},transition:{duration:.7,ease:[.23,1,.32,1]},className:"flex flex-col gap-6 flex-1",children:[i.jsx("h1",{className:"font-display font-normal text-[clamp(40px,5vw,72px)] leading-[94%] tracking-[-1px] sm:tracking-[-3.5px] text-white max-w-[1000px]",children:"Build any solution on top of Cisco Networking"}),i.jsx("p",{className:"text-xl leading-[150%] text-white/80 max-w-[600px]",children:"AI agents and Cisco Networking experts build custom solutions tailored to your industry: automation scripts, analytics dashboards, control UIs, compliance tools, integrations, and monitoring."}),i.jsxs("div",{className:"flex gap-3 sm:gap-4 mt-2",children:[i.jsx(Kr,{href:"/#cta",variant:"primary",className:"h-[44px] sm:h-[56px] px-[16px] sm:px-[24px] py-[10px] sm:py-[16px] text-[14px] sm:text-[18px] whitespace-nowrap",onClick:l=>{l.preventDefault();const c=document.getElementById("cta");c&&c.scrollIntoView({behavior:"smooth",block:"start"}),Dn("homepage-v3-hero")},children:"Describe Your Project"}),i.jsx(Kr,{href:"/#how-it-works",variant:"ghost",className:"h-[44px] sm:h-[56px] px-[16px] sm:px-[24px] py-[10px] sm:py-[16px] text-[14px] sm:text-[18px] whitespace-nowrap",children:"See How It Works"})]}),i.jsxs("div",{className:"flex flex-col gap-3 mt-6",children:[i.jsx("div",{className:"flex items-center gap-4 flex-wrap",children:X9.map(l=>i.jsx("a",{href:"https://marketplace.cisco.com/en-US/apps/502978/selentai",target:"_blank",rel:"noopener noreferrer",className:"backdrop-blur-[20px] bg-[rgba(235,235,246,0.1)] rounded-2xl flex items-center shrink-0",children:i.jsx("div",{className:"flex items-center p-4",children:i.jsx("div",{className:"relative shrink-0 h-[60px] w-auto",children:i.jsx("img",{alt:l.alt,className:"h-full w-auto object-contain",src:l.src})})})},l.alt))}),i.jsxs("div",{className:"flex flex-col gap-0.5",children:[i.jsx("p",{className:"font-semibold leading-[1.3] text-base text-white",children:"Cisco Technology Partner · Cisco Select Developer"}),i.jsxs("p",{className:"text-[11px] text-white/40",children:["Cisco Meraki ",i.jsx("span",{className:"text-emerald-400/70",children:"â
ready"})," · Cisco Catalyst ",i.jsx("span",{className:"text-amber-400/70",children:"â
in progress"})]})]})]})]}),i.jsx(M.div,{initial:{opacity:0,scale:.95},animate:{opacity:1,scale:1},transition:{duration:.7,delay:.3,ease:[.23,1,.32,1]},className:"w-full lg:shrink-0 lg:w-auto",children:i.jsx(nq,{})})]})})})]}),i.jsx("div",{className:"h-[2px] w-full",style:{background:"linear-gradient(90deg, transparent 0%, #3B82F6 50%, transparent 100%)"}}),i.jsxs("section",{id:"how-it-works",className:"bg-[#0B0B1A] overflow-hidden scroll-mt-[80px]",children:[i.jsxs("div",{className:"flex flex-col items-center gap-4 px-6 lg:px-[120px] pt-20 pb-16",children:[i.jsxs("div",{className:"flex items-center gap-2 rounded-full bg-[#1A1A2E] border border-[#262640] px-[14px] py-[6px]",children:[i.jsx(br,{className:"w-[14px] h-[14px] text-cyan-400"}),i.jsx("span",{className:"text-[12px] font-semibold text-cyan-400 tracking-[2px]",children:"HOW IT WORKS"})]}),i.jsx("h2",{className:"font-display text-[40px] font-bold text-white text-center max-w-[700px]",children:"From idea to deployed solution in days, not months"})]}),i.jsx("div",{className:"relative px-6 lg:px-[40px] pb-24",children:i.jsxs("div",{className:"max-w-[1400px] mx-auto relative",children:[i.jsx("div",{className:"hidden lg:grid",style:{gridTemplateColumns:"240px 148px 240px 148px 240px 148px 240px 148px 240px",justifyContent:"center",alignItems:"center"},children:(()=>{const l=[{num:"01",icon:ic,title:"Submit Request",desc:"Submit your challenge by describing your requirement in your Selent dashboard.",code:["environment.target = {",' platform: "meraki",',' org: "Acme Corp",',' scope: "auto_provision"',"}"],offsetY:0},{num:"02",icon:Hs,title:"AI Builds PRD",desc:"AI agents and Cisco Networking experts build custom solutions for your network.",code:["const analysis
9741= await ai"," .analyze(request)"," .then(buildSpec)"," .then(estimateCost)"],offsetY:70},{num:"03",icon:jn,title:"Proposal & Estimate",desc:"Review a clear proposal with timeline, deliverables, and transparent pricing.",code:["deliverables: [",' "API integration",',' "Dashboard UI",',' "Monitoring alerts"',"]"],offsetY:0},{num:"04",icon:oe,title:"You Approve",desc:"You can access both code base that you approve.",code:['status: "approved",','date: "2026-02-26",','signedBy: "admin"'],offsetY:30},{num:"05",icon:Us,title:"Build & Deliver",desc:"Build and deliver a customized solution for your network.",code:["deploy: {",' env: "production",',' status: "live",',"}"],offsetY:0}],c=[];return l.forEach((u,d)=>{c.push(i.jsxs(M.div,{initial:{opacity:0,y:30},whileInView:{opacity:1,y:0},transition:{duration:.5,delay:d*.1},viewport:{once:!0},className:"flex flex-col gap-4 rounded-[16px] p-5 relative z-10 w-[240px] h-[340px]",style:{marginTop:`${u.offsetY}px`,background:"linear-gradient(160deg, rgba(20,20,50,0.9) 0%, rgba(12,12,35,0.95) 100%)",border:"1px solid rgba(34,211,238,0.15)",boxShadow:"0 4px 30px rgba(0,0,0,0.4), inset 0 1px 0 rgba(255,255,255,0.04)",backdropFilter:"blur(20px)"},children:[i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsx("div",{className:"rounded-[8px] px-2.5 py-1.5",style:{background:"rgba(34,211,238,0.1)",border:"1px solid rgba(34,211,238,0.2)"},children:i.jsx("span",{className:"font-mono text-[13px] font-bold text-cyan-400",children:u.num})}),i.jsx("div",{className:"w-9 h-9 rounded-[10px] flex items-center justify-center",style:{background:"rgba(34,211,238,0.08)",border:"1px solid rgba(34,211,238,0.15)"},children:i.jsx(u.icon,{className:"w-[18px] h-[18px] text-cyan-400"})})]}),i.jsxs("div",{className:"flex flex-col gap-2",children:[i.jsx("h3",{className:"text-[17px] font-bold text-white leading-tight",children:u.title}),i.jsx("p",{className:"text-[13px] leading-[1.5] text-[#7B8BA5]",children:u.desc})]}),i.jsxs("div",{className:"rounded-[10px] p-3",style:{background:"rgba(6,6,20,0.8)",border:"1px solid rgba(34,211,238,0.08)"},children:[i.jsxs("div",{className:"flex gap-1.5 mb-2.5",children:[i.jsx("span",{className:"w-[7px] h-[7px] rounded-full bg-[#ff5f57]"}),i.jsx("span",{className:"w-[7px] h-[7px] rounded-full bg-[#febc2e]"}),i.jsx("span",{className:"w-[7px] h-[7px] rounded-full bg-[#28c840]"})]}),i.jsx("div",{className:"flex flex-col gap-0.5",children:u.code.map((m,p)=>i.jsx("span",{className:"font-mono text-[10px] leading-[1.6] text-[#5B7A9D]",children:m},p))})]})]},u.num)),d<l.length-1&&c.push(i.jsx(M.div,{className:"relative z-0 overflow-visible",style:{height:340},initial:"hidden",whileInView:"visible",viewport:{once:!0},children:(()=>{const m=d%2===0,p=m?40:320,f=m?320:40,g=`M 0,${p} C 50,${p} 74,${p} 74,${(p+f)/2} C 74,${f} 98,${f} 148,${f}`,y=500,w=(d+1)*.1+.3;return i.jsxs("svg",{className:"absolute inset-0 w-full h-full overflow-visible",viewBox:"0 0 148 340",fill:"none",children:[i.jsx(M.path,{d:g,stroke:"rgba(34,211,238,0.1)",strokeWidth:"28",strokeLinecap:"round",fill:"none",variants:{hidden:{opacity:0},visible:{opacity:1,transition:{duration:.8,delay:w}}}}),i.jsx(M.path,{d:g,stroke:"rgba(34,211,238,0.3)",strokeWidth:"10",strokeLinecap:"round",fill:"none",variants:{hidden:{strokeDasharray:y,strokeDashoffset:y},visible:{strokeDashoffset:0,transition:{duration:.8,delay:w,ease:"easeInOut"}}}}),i.jsx(M.path,{d:g,stroke:"rgb(34,211,238)",strokeWidth:"2.5",strokeLinecap:"round",fill:"none",variants:{hidden:{strokeDasharray:y,strokeDashoffset:y},visible:{strokeDashoffset:0,transition:{duration:.8,delay:w,ease:"easeInOut"}}}})]})})()},`c${d}`))}),c})()}),i.jsx("div",{className:"flex flex-col items-center gap-0 lg:hidden",children:[{num:"01",icon:ic,title:"Submit Request",desc:"Submit your challenge by describing your requirement.",code:["environment.target = {",' platform: "meraki"',"}"]},{num:"02",icon:Hs,title:"AI Builds PRD",desc:"AI agents build custom solutions for your network.",code:["const analysis = await ai"," .analyze(request)"]},{num:"03",icon:jn,title:"Proposal & Estimate",desc:"Review a clear proposal with timeline and pricing.",code:["deliverables: [",' "API integration"',"]"]},{num:"04",icon:oe,title:"You Approve",desc:"Approve the plan and we start building.",code:['status: "approved"']},{num:"05",icon:Us,title:"Build & Deliver",desc:"We build, test, and deploy your solution.",code:['deploy: { env: "prod" }']}].map((l,c)=>i.jsxs(Et.Fragment,{children:[i.jsxs(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},transition:{duration:.4,delay:c*.08},viewport:{once:!0}
9741,className:"flex flex-col gap-4 rounded-[16px] p-5 w-full max-w-[320px]",style:{background:"linear-gradient(160deg, rgba(20,20,50,0.9) 0%, rgba(12,12,35,0.95) 100%)",border:"1px solid rgba(34,211,238,0.15)",boxShadow:"0 4px 30px rgba(0,0,0,0.4)"},children:[i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsx("div",{className:"rounded-[8px] px-2.5 py-1.5",style:{background:"rgba(34,211,238,0.1)",border:"1px solid rgba(34,211,238,0.2)"},children:i.jsx("span",{className:"font-mono text-[13px] font-bold text-cyan-400",children:l.num})}),i.jsx("div",{className:"w-9 h-9 rounded-[10px] flex items-center justify-center",style:{background:"rgba(34,211,238,0.08)",border:"1px solid rgba(34,211,238,0.15)"},children:i.jsx(l.icon,{className:"w-[18px] h-[18px] text-cyan-400"})})]}),i.jsx("h3",{className:"text-[17px] font-bold text-white",children:l.title}),i.jsx("p",{className:"text-[13px] leading-[1.5] text-[#7B8BA5]",children:l.desc}),i.jsxs("div",{className:"rounded-[10px] p-3",style:{background:"rgba(6,6,20,0.8)",border:"1px solid rgba(34,211,238,0.08)"},children:[i.jsxs("div",{className:"flex gap-1.5 mb-2",children:[i.jsx("span",{className:"w-[7px] h-[7px] rounded-full bg-[#ff5f57]"}),i.jsx("span",{className:"w-[7px] h-[7px] rounded-full bg-[#febc2e]"}),i.jsx("span",{className:"w-[7px] h-[7px] rounded-full bg-[#28c840]"})]}),l.code.map((u,d)=>i.jsx("span",{className:"block font-mono text-[10px] leading-[1.6] text-[#5B7A9D]",children:u},d))]})]}),c<4&&i.jsx("div",{className:"w-[2px] h-[40px] my-1",style:{background:"linear-gradient(180deg, transparent, rgba(34,211,238,0.8), transparent)",boxShadow:"0 0 8px 2px rgba(34,211,238,0.4)"}})]},l.num))})]})})]}),i.jsx("div",{className:"h-[2px] w-full",style:{background:"linear-gradient(90deg, transparent 0%, #3B82F6 50%, transparent 100%)"}}),i.jsxs("section",{id:"solutions",className:"bg-dark-base scroll-mt-[80px]",children:[i.jsxs("div",{className:"flex flex-col items-center gap-4 px-6 lg:px-[120px] pt-20 pb-10",children:[i.jsxs("div",{className:"flex items-center gap-2 rounded-full bg-[#141416] border border-[#262629] px-[14px] py-[6px]",children:[i.jsx(mn,{className:"w-[14px] h-[14px] text-blue-400"}),i.jsx("span",{className:"text-[12px] font-semibold text-blue-400 tracking-[2px]",children:"SOLUTIONS"})]}),i.jsx("h2",{className:"font-display text-[40px] font-bold text-white text-center max-w-[700px]",children:"Whatever you need on Cisco Networking, we build it"})]}),i.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-5 px-6 lg:px-[80px] pb-20 max-w-[1400px] mx-auto",children:[{icon:Pn,iconColor:"text-[#4ECDC4]",title:"Automation Scripts",desc:"Automate repetitive network tasks: bulk provisioning, config templates, scheduled changes, and API-driven workflows.",tags:[{label:"Python",color:"teal"},{label:"Cisco Networking API",color:"teal"},{label:"Webhooks",color:"muted"}]},{icon:In,iconColor:"text-[#7C8DB5]",title:"Analytics Dashboards",desc:"Custom dashboards with real-time network metrics, traffic analysis, device health, and historical trends.",tags:[{label:"Real-time",color:"teal"},{label:"Visualization",color:"muted"},{label:"Alerts",color:"muted"}]},{icon:mn,iconColor:"text-[#4ECDC4]",title:"Control UIs",desc:"Purpose-built interfaces for network operators: simplified views, bulk actions, and role-based access controls.",tags:[{label:"React",color:"teal"},{label:"Role-based",color:"muted"},{label:"Custom",color:"muted"}]},{icon:gi,iconColor:"text-[#7C8DB5]",title:"Compliance Tools",desc:"Automated compliance checks, audit trails, policy enforcement, and regulatory reporting for your Cisco Networking infrastructure.",tags:[{label:"PCI DSS",color:"teal"},{label:"Audit",color:"muted"},{label:"Policies",color:"muted"}]},{icon:Ma,iconColor:"text-[#4ECDC4]",title:"Custom Integrations",desc:"Connect Cisco Networking with your existing tools: ITSM, monitoring platforms, identity providers, and business systems.",tags:[{label:"Cisco Networking API",color:"teal"},{label:"ServiceNow",color:"muted"},{label:"Splunk",color:"muted"}]},{icon:fi,iconColor:"text-[#7C8DB5]",title:"Monitoring & Alerts",desc:"Proactive monitoring with intelligent alerts, anomaly detection, and automated incident response for your network.",tags:[{label:"AI-Powered",color:"teal"},{label:"Proactive",color:"muted"},{label:"24/7",color:"muted"}]}].map((l,c)=>i.jsxs(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},transition:{duration:.4,delay:c*.05},viewport:{once:!0},className:"flex flex-col gap-3 rounded-[16px] p-[24px_20px]",style:{background:"linear-gradient(160deg, rgba(20,20,50,0.9) 0%, rgba(12,12,35,0.95) 100%)",border:"1px solid rgba(34,211,238,0.15)",boxShadow:"0 4px 30px rgba(0,0,0,0.4), inset 0 1px 0 rgba(255,255,255,0.04)",backdropFilter:"blur(20px)"},children:[i.jsx(l.icon,{className:`w-6 h-6 ${l.iconColor}`}),i.jsx("h3",{className:"text-[16px] font-semibold text-white",children:l.title}),i.jsx("p",{className:"text-[13px] leading-[1.5] text-[#94A3B8]",children:l.desc}),i.jsx("div",{className:"flex gap-[6px] flex-wrap mt-1",children:l.tags.map(u=>i.jsx("span",{className:`rounded-full px-2 py-[3px] text-[10px] font-medium font-mono ${u.color==="teal"?"bg-[#4ECDC415] text-[#4ECDC4]":"bg-[#7C8DB515] text-[#7C8DB5]"}`,children:u.label},u.label))})]}
9741,l.title))})]}),i.jsx("div",{className:"h-[2px] w-full",style:{background:"linear-gradient(90deg, transparent 0%, #3B82F6 50%, transparent 100%)"}}),i.jsxs("section",{className:"bg-[#060610] overflow-hidden",children:[i.jsxs("div",{className:"flex flex-col items-center gap-4 px-6 lg:px-[120px] pt-20 pb-10",children:[i.jsxs("div",{className:"flex items-center gap-2 rounded-full bg-[#1A1A2E] border border-[#262640] px-[14px] py-[6px]",children:[i.jsx(tt,{className:"w-[14px] h-[14px] text-blue-400"}),i.jsx("span",{className:"text-[12px] font-semibold text-blue-400 tracking-[2px]",children:"YOUR RULES. YOUR OUTCOMES."})]}),i.jsxs("h2",{className:"font-display text-[32px] sm:text-[40px] font-bold text-white text-center max-w-[760px] tracking-[-1px] sm:tracking-[-2px]",children:["Selent doesn't just solve problems â",i.jsx("br",{className:"hidden sm:block"})," it amplifies everything Cisco Networking can do for you"]}),i.jsx("p",{className:"text-[17px] sm:text-[19px] leading-[1.6] text-[#94A3B8] text-center max-w-[620px]",children:"Every network is different. Every industry has its own complexity, its own compliance requirements, its own pace. Selent builds to your reality â not a template."})]}),i.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 px-6 lg:px-[80px] pb-20 max-w-[1400px] mx-auto",children:[{verb:"Deepens",headline:"Your expertise",desc:"Selent extends what your team already knows, layering AI intelligence on top of Cisco Networking operations so every engineer does more.",color:"text-blue-400",border:"border-blue-500/20",bg:"bg-blue-500/5"},{verb:"Amplifies",headline:"Your investment",desc:"Get more value from your existing Cisco Networking infrastructure. Every device, every API endpoint, every data point â unlocked.",color:"text-cyan-400",border:"border-cyan-500/20",bg:"bg-cyan-500/5"},{verb:"Extends",headline:"To your industry",desc:"Healthcare, finance, retail, education â your vertical has unique demands. Selent adapts to your compliance rules, workflows, and SLAs.",color:"text-emerald-400",border:"border-emerald-500/20",bg:"bg-emerald-500/5"},{verb:"You define",headline:"The limits",desc:"There's no rigid product box. You describe the outcome you need, and Selent builds the intelligence to achieve it â exactly as you need it.",color:"text-violet-400",border:"border-violet-500/20",bg:"bg-violet-500/5"}].map((l,c)=>i.jsxs(M.div,{initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},transition:{duration:.4,delay:c*.08},viewport:{once:!0},className:`flex flex-col gap-3 rounded-[16px] p-6 border ${l.border} ${l.bg}`,style:{background:"linear-gradient(160deg, rgba(20,20,50,0.85) 0%, rgba(10,10,30,0.9) 100%)",boxShadow:"0 4px 30px rgba(0,0,0,0.3)",backdropFilter:"blur(20px)"},children:[i.jsx("span",{className:`text-[13px] font-bold uppercase tracking-[2px] ${l.color}`,children:l.verb}),i.jsx("h3",{className:"text-[18px] font-semibold text-white leading-tight",children:l.headline}),i.jsx("p",{className:"text-[13px] leading-[1.6] text-[#94A3B8]",children:l.desc})]},l.verb))})]}),i.jsx("div",{className:"h-[2px] w-full",style:{background:"linear-gradient(90deg, transparent 0%, #3B82F6 50%, transparent 100%)"}}),i.jsx("section",{id:"cta",className:"bg-[#0B0B1A] scroll-mt-[80px]",children:i.jsxs("div",{className:"flex flex-col items-center gap-6 sm:gap-8 px-4 sm:px-6 lg:px-[200px] py-12 sm:py-20",children:[i.jsx("h2",{className:"font-display text-[28px] sm:text-[40px] font-bold text-white text-center max-w-[650px]",children:"Describe your first Cisco Networking project"}),i.jsx("p",{className:"text-[17px] sm:text-[23px] text-[#94A3B8] text-center max-w-[550px]",children:"Tell us what you need and our AI agents will analyze your request within hours."}),i.jsx(K9,{}),i.jsxs("div",{className:"flex items-center gap-8 justify-center flex-wrap",children:[i.jsx("span",{className:"text-[14px] text-[#94A3B8]",children:"Free analysis"}),i.jsx("span",{className:"text-[14px] text-[#94A3B8]",children:"Response in <24h"}),i.jsx("span",{className:"text-[14px] text-[#94A3B8]",children:"No commitment"})]})]})}),i.jsxs("footer",{className:"bg-dark-base",children:[i.jsx("div",{className:"h-[2px] w-full",style:{background:"linear-gradient(90deg, transparent 0%, #3B82F6 50%, transparent 100%)"}}),i.jsx("div",{className:"flex flex-col px-6 lg:px-[120px] py-16",children:i.jsxs("div",{className:"flex flex-col gap-5",children:[i.jsx(Ne,{to:"/",children:i.jsx("img",{src:"/logo_white.png",alt:"Selent",className:"h-9 w-auto object-contain"})}),i.jsxs("p",{className:"text-[14px] leading-[1.6] text-[#94A3B8]",children:["Building intelligent solutions on Cisco Networking.",` 9742`,"From idea to deployed AI agents in days, not months."]}),i.jsxs("div",{className:"flex gap-4",children:[i.jsx("a",{href:"https://twitter.com/selentai",target:"_blank",rel:"noopener noreferrer",className:"text-[#64748B] hover:text-white transition-colors",children:i.jsx("svg",{className:"w-5 h-5",fill:"currentColor",viewBox:"0 0 24 24",children:i.jsx("path",{d:"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"})})}),i.jsx("a",{href:"https://github.com/selent-ai",target:"_blank",rel:"noopener noreferrer",className:"text-[#64748B] hover:text-white transition-colors",children:i.jsx("svg",{className:"w-5 h-5",fill:"currentColor",viewBox:"0 0 24 24",children:i.jsx("path",{d:"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158
9742-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"})})}),i.jsx("a",{href:"https://www.linkedin.com/company/selentai/",target:"_blank",rel:"noopener noreferrer",className:"text-[#64748B] hover:text-white transition-colors",children:i.jsx("svg",{className:"w-5 h-5",fill:"currentColor",viewBox:"0 0 24 24",children:i.jsx("path",{d:"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"})})}),i.jsx("a",{href:"https://youtube.com/@selentai",target:"_blank",rel:"noopener noreferrer",className:"text-[#64748B] hover:text-white transition-colors",children:i.jsx("svg",{className:"w-5 h-5",fill:"currentColor",viewBox:"0 0 24 24",children:i.jsx("path",{d:"M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"})})})]})]})}),i.jsx("div",{className:"h-px bg-[#1A1A1D]"}),i.jsxs("div",{className:"flex flex-col sm:flex-row items-center justify-between px-6 lg:px-[120px] py-6",children:[i.jsx("span",{className:"text-[13px] text-[#475569]",children:"© 2026 selent. All rights reserved."}),i.jsxs("div",{className:"flex items-center gap-6",children:[i.jsx(Ne,{to:"/privacy",className:"text-[13px] text-[#475569] hover:text-white transition-colors",children:"Privacy"}),i.jsx(Ne,{to:"/terms",className:"text-[13px] text-[#475569] hover:text-white transition-colors",children:"Terms"})]})]}),i.jsx("div",{className:"h-8"})]})]})]})]})};function iq(){return i.jsxs(gS,{children:[i.jsx(V9,{}),i.jsxs(lS,{children:[i.jsx(Se,{path:"/",element:i.jsx(aq,{})}),i.jsx(Se,{path:"/v2",element:i.jsx($9,{})}),i.jsx(Se,{path:"/blog",element:i.jsx(N5,{})}),i.jsx(Se,{path:"/blog/:slug",element:i.jsx(jz,{})}),i.jsx(Se,{path:"/terms",element:i.jsx(Pz,{})}),i.jsx(Se,{path:"/privacy",element:i.jsx(Jo,{})}),i.jsx(Se,{path:"/privacy-policy",element:i.jsx(Jo,{})}),i.jsx(Se,{path:"/politica-de-privacidad",element:i.jsx(Jo,{})}),i.jsx(Se,{path:"/politica-de-privacidade",element:i.jsx(Jo,{})}),i.jsx(Se,{path:"/signup",element:i.jsx(Hz,{})}),i.jsx(Se,{path:"/landing-meraki",element:i.jsx(Yz,{})}),i.jsx(Se,{path:"/landing-meraki-gracias",element:i.jsx(Gz,{})}),i.jsx(Se,{path:"/landing-meraki-en",element:i.jsx(Jz,{})}),i.jsx(Se,{path:"/landing-meraki-thank-you",element:i.jsx(t9,{})}),i.jsx(Se,{path:"/contact",element:i.jsx(o9,{})}),i.jsx(Se,{path:"/contact-thank-you",element:i.jsx(l9,{})}),i.jsx(Se,{path:"/contacto",element:i.jsx(x9,{})}),i.jsx(Se,{path:"/contacto-gracias",element:i.jsx(y9,{})}),i.jsx(Se,{path:"/deck-v1-2b235eb4",element:i.jsx(F9,{})}),i.jsx(Se,{path:"/deck-v1-en-9f4a2c8e",element:i.jsx(H9,{})}),i.jsx(Se,{path:"/deck-v2-7f8a9c1e",element:i.jsx(S9,{})}),i.jsx(Se,{path:"/deck-export",element:i.jsx(U9,{})}),!1,i.jsx(Se,{path:"*",element:i.jsx(e9,{})})]})]})}x5();y5();vN.render(i.jsx(d1,{children:i.jsx(E5,{children:i.jsx(iq,{})})}),document.getElementById("root"));
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.