PageSourceSearch

https://www.selent.ai/assets/index-CaSKtxTu.js

js selent.ai collected 2026-10-05 15:49:36 UTC 1,739,739 bytes, 9,742 lines download raw bytes

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,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;"),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&&gt.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&&lt(e.charCodeAt(n+1))&&lt(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ȀDMPTLJNjǑǖ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;扐blè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;戥ǹ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;䅻Dzᕔ\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;ẝẤijạả;怄;怅怃Ā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;耀ffiɩᾹ\0\0á¾½g;耀ffig;耀ffl;쀀𝔣lig;耀filig;쀀fjƀaltῙ῜ῡt;晭ig;耀flns;斱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⧓ସdz⧟\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᪠ⵒⵗLjⵚ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㚆㚝㚵㚼Dz㚋\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_,"&lt;$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.